본문 바로가기
Algorithm

[Algorithm] Swift 백준 18110번

by ykr0919 2024. 4. 14.

 

 

https://www.acmicpc.net/problem/18110

 

18110번: solved.ac

5명의 15%는 0.75명으로, 이를 반올림하면 1명이다. 따라서 solved.ac는 가장 높은 난이도 의견과 가장 낮은 난이도 의견을 하나씩 제외하고, {5, 5, 7}에 대한 평균으로 문제 난이도를 결정한다.

www.acmicpc.net

 

문제접근 

 

많이 어려운 문제가 아니었음!! 

문제에서 원하는 순서대로 하나하나 구현해 주면 됨!! 

바로 코드로 들어가 보자!! 

 

정답풀이 

 

import Foundation

var result:Int = 0
var inputArr:[Int] = []

let n = Int(readLine()!)!

for _ in 0..<n {
    inputArr.append(Int(readLine()!)!)
}

inputArr.sort()

var exceptCount = round(Double(n)*0.15)

inputArr.removeFirst(Int(exceptCount))
inputArr.removeLast(Int(exceptCount))

if inputArr.isEmpty {
    print(result)
} else {
    result = inputArr.reduce(0, +)
    print(Int(round(Double(result) / Double(inputArr.count))))
}

 

우선 난이도 의견을 받아줌!! 

 

난이도를 sort()로 오름차순으로 정렬해 줌 (그래야 가장 낮은 난이도와 가장 높은 난이도를 빼기 쉬우니깐!!! )

 

절사평균의 경우 위에서 15% 아래에서 15% 제외해야 함!!

 

전체 의견의 개수에서 15%를 구해준 다음 round()로 반올림을 해줌.

 

ex) 25명이 투표한 경우 위, 아래에서 각각 3.75명을 제외해야 하는데, 이 경우 반올림해 4명씩을 제외

 

그 후 위아래를 removeFirst(), removeLast()를 이용해서 제외해 줌!! 

 

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
 
array.removeFirst(2)            // [3, 4, 5, 6, 7, 8, 9]
array1.removeLast(2)             // [1, 2, 3, 4, 5, 6, 7]

 

위는 예시임!!  2가 들어가면 배열의 첫 번째부터 혹은 마지막부터 지정된 개수를 제거해 주는 거임!!

 

15% 아래에서 15% 제외해 준 다음!! 

 

만약 난이도 의견이 없다면 0을 출력해 주고 

 

의견이 있다면 제외해 준 나머지를 reduce()로 다 더해서 평균을 내준 뒤~ 

 

반올림해 주면 됨!!

 

여기서!!!!! 평균을 구해줄 때 Double/Double로 해주어야 ex) 5.8 등등 실수형으로 나옴!! 

 

그래야지 마지막 평균을 반올림해서 정답이 나올 수 있음!!!