https://www.acmicpc.net/problem/1713
Dictionary, Tuple를 이용하여 구현. 제거할 후보를 구하는 로직은 처음에는 우선순위 큐를 이용할까 싶었지만, 정렬을 이용. 처음 풀었을때는 정렬을 사용하지 않고 각 Case 별로 구현했지만 이런식으로 하는게 좀 더 쉬운듯하다.
import Foundation
let n = Int(readLine()!)!
let recommendNum = Int(readLine()!)!
let recommendArr = readLine()!.split(separator: " ").map{Int($0)!}
// 1번이 추천받은 개수 2번이 추가된 시간
var photo: [Int: (Int, Int)] = [:]
for item in 0..<recommendNum {
if photo[recommendArr[item]] != nil {
photo[recommendArr[item]]!.0 += 1
} else {
if photo.count < n {
photo[recommendArr[item]] = (1, item)
} else {
let sortedList = photo.sorted { first, second in
if first.value.0 == second.value.0 {
return first.value.1 < second.value.1
}
return first.value.0 < second.value.0
}
photo[sortedList[0].key] = nil
photo[recommendArr[item]] = (1, item)
}
}
}
var answerArr: [String] = []
for item in photo.sorted(by: { $0.key < $1.key }) {
answerArr.append("\(item.key)")
}
print(answerArr.joined(separator: " "))
'Algorithm > 백준' 카테고리의 다른 글
Swift) 백준 16234번 인구이동 - G4 (1) | 2023.12.26 |
---|---|
Swift) 백준 20055번 컨베이어 벨트위의 로봇 - G5 (0) | 2023.12.25 |
Swift) 백준 6603 로또 - S2 (0) | 2023.09.23 |
Swift) 백준 2503번 숫자 야구 - S3 (0) | 2023.09.18 |
Swift) 백준 17503번 맥주 축제 - S1 (0) | 2023.07.09 |