티스토리 뷰
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import Foundation let arrayCount = Int(readLine()!)! var array = [Int]() for _ in 1...arrayCount{ array.append(Int(readLine()!)!) } array = array.sorted(by: <) let average = Int((Double(array.reduce(0){ $0 + $1 }) / Double(arrayCount)).rounded()) let median = array[arrayCount / 2] let range = array.last! - array.first! if(arrayCount == 1){ print(average) print(median) print(array[0]) print(range) exit(0) } var dic = [Int: Int]() var count = 1 for i in 0..<arrayCount - 1{ if(array[i] == array[i+1]){ count += 1 dic[array[i]] = count } else { dic[array[i]] = count count = 1 } } if(array[arrayCount - 2] != array[arrayCount - 1]){ dic[array[arrayCount - 1]] = 1 } var sortedDic = dic.sorted(by: { (first, second) -> Bool in return first.key < second.key }) let max = {() -> Int in var values = [Int]() for i in sortedDic{ values.append(i.value) } return values.max()! }() sortedDic = sortedDic.filter { (key, value) -> Bool in return value == max } let mode: Int if(sortedDic.count == 1){ mode = (sortedDic.first?.key)! } else { sortedDic = sortedDic.sorted(by: { (first, second) -> Bool in return first.key < second.key }) mode = sortedDic[1].key } print(average) print(median) print(mode) print(range) | cs |
코드가 너무 더럽다...
어느 정도 푼 다음 채점 결과를 기다렸는데 100%에서 런타임 오류가 나길래 생각해 봤는데
N이 1일 때 최빈값을 구하는 코드로 들어가면 잘못된 인덱스를 참조하는 것이 되므로 해당 경우에 따로 처리해 준다.
'Algorithm > Baekjoon Online Judge' 카테고리의 다른 글
1475번 '방 번호' (0) | 2018.02.23 |
---|---|
1157번 '단어 공부' (0) | 2018.02.23 |
1427번 '소트인사이드' (0) | 2018.02.23 |
11721번 '열 개씩 끊어 출력하기' (0) | 2018.02.23 |
11720번 '숫자의 합' (0) | 2018.02.23 |
댓글