요구능력 : 최빈값을 구할줄 아느냐
코드설명 :
최빈값을 구하기 위해서는 Dictionary를 사용하는게 가장 알맞다.
꽤 오래 쓰지 않아서 간단하게 개념정리를 하고 넘어가야겠다.
딕셔너리 : 순서없이 키와 쌍의 값으로 구성되고, 키는 중복될 수 없다.
여러가지 선언방법이 있지만 여기서 사용한 선언방법
var dict = [Int: Int]()
2. 딕셔너리의 사용
dictionary에 값을 입력받을 때마다 바로바로 넣어주고 value가 없는경우에는 default값이 0이 들어가도록 해줬다.
그리고 입력받을 때마다 키의 value에 1씩 더해줘서 만약 3, 2, 2 0 을 입력하고 dict값을 출력해본다면
[3: 1, 2: 2, 0: 1] 이렇게 출력될것이다.
dict[num, default: 0] += 1
3. 딕셔너리 함수 max
max함수는 말 그대로 가장 큰 값을 불러오는 함수이다.
max함수의 by에 적혀있는 건 그냥 공식(?)느낌이라고 생각하면된다.
max함수의 return은 value가 가장 큰 optional(key : value) 이다.
그래서 optional풀어주고 그 중에 value값을 가져온것이다.
let maxValue = dict.max(by: {$0.value < $1.value})!.value
4. 딕셔너리 함수 filter
말그대로 조건에 맞게 필터링한다는 의미를 갖고있다.
조건에 맞는 새로운 Dictionary를 리턴해준다.
value값이 maxValue와 같은 것의 키들을 정렬해서 새로운 Dictionary를 생성한것이다.
var mode = dict.filter({ $0.value == maxValue}).keys.sorted()
후기 : 못풀겠어서 여러가지 답안을보고 구글링해봤는데,, 딕셔너리를 쓰는게 가장 이상적으로 보이는.... 바보같이 딕셔너리를 생각못했다... 딕셔너리 공부하는 좋은계기가 됐다.
import Foundation
let n = Int(readLine()!)!
var arr: [Int] = []
var average: Double = 0.0
var sum = 0
var dict = [Int:Int]()
for _ in 0..<n {
let num = Int(readLine()!)!
arr.append(num)
dict[num, default: 0] += 1
}
//산술평균
for i in 0..<arr.count {
sum += arr[i]
}
average = (Double(sum) / Double(arr.count))
print("\(Int(round(average)))")
//중앙값
arr.sort()
print("\(arr[((arr.count / 2))])")
//최빈값
let maxValue = dict.max(by: {$0.value < $1.value})!.value
var mode = dict.filter({ $0.value == maxValue}).keys.sorted()
if mode.count > 1 {
print("\(mode[1])")
}else {
print("\(mode[0])")
}
//범위
print("\(arr.max()! - arr.min()!)")
'Algorithm > 문제풀이_백준' 카테고리의 다른 글
Swift) 백준 11650번 (좌표 정렬하기) (0) | 2021.08.23 |
---|---|
Swift) 백준 1427번 (소트인사이드) (0) | 2021.08.21 |
Swift) 백준 2751번 (수 정렬하기2) (0) | 2021.08.20 |
Swift) 백준 2750번 (수 정렬하기) (0) | 2021.08.20 |
Swift) 백준 1436번 (영화감독 숌) (0) | 2021.08.20 |
댓글