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 등등 실수형으로 나옴!!
그래야지 마지막 평균을 반올림해서 정답이 나올 수 있음!!!
'Algorithm' 카테고리의 다른 글
| [Algorithm] Swift 백준 2563번 (3) | 2024.05.19 |
|---|---|
| [Algorithm] Swift 백준 1002번 (0) | 2024.05.06 |
| [Algorithm] Swift 백준 15829번 (0) | 2024.04.13 |
| [Algorithm] Swift 백준 10773번 (3) | 2024.04.06 |
| [Algorithm] Swift 유클리드 호제법 (최대공약수), 그리고 최소공배수 (2) | 2024.03.29 |