산술평균과 중앙값, 범위를 구하는 방법은 쉽지만 최빈값을 구하기 위해서는 조금 고민을 해야합니다.

저같은 경우에는 딕셔너리를 사용하여 해결하였습니다.

딕셔너리에 값을 넣어 정렬을 한 후 최빈값이 2개라면 그중 후자를 출력할 수 있도록 만들었습니다.

import Foundation

let num = Int(readLine()!)!
var arr:[Int] = []

for _ in 1...num {
    arr.append(Int(readLine()!)!)
}

// 1. 산술평균 구하기
var sum = 0
arr.forEach { sum+=$0 }

print(Int(Double(Double(sum)/Double(arr.count)).rounded()))

// 2. 중앙값 구하기
arr.sort()

print(arr[arr.count/2])

// 3. 최빈값 구하기
var tmp: [Int:Int] = [:]

for i in arr {
    if tmp[i] == nil {
        tmp[i] = 1
    } else {
        tmp[i]! += 1
    }
}

var tmp2 = tmp.sorted(by: { $0.value == $1.value ? $0.key < $1.key : $0.value > $1.value })

var pre1 = tmp2.first
tmp2.removeFirst()
var pre2 = tmp2.first

if pre1?.value == pre2?.value {
    print(pre2!.key)
} else {
    print(pre1!.key)
}

// 4. 범위 구하기
print(arr.max()!-arr.min()!)

'Algorithm > Baekjoon' 카테고리의 다른 글

Swift - 백준 1003번 피보나치 함수  (0) 2024.08.25
Swift - 백준 4949번 균형잡힌 세상  (0) 2024.08.22
Swift - 백준 7568번 덩치  (0) 2024.08.21
Swift - 백준 10773번 제로  (0) 2024.08.20
Swift - 백준 2231 분해합  (0) 2024.08.20
ytw_developer