Algorithm/백준
Swift) 백준 1713번 후보 추천하기 - S1
콩벌레 개발자
2023. 11. 21. 23:21
https://www.acmicpc.net/problem/1713
1713번: 후보 추천하기
첫째 줄에는 사진틀의 개수 N이 주어진다. (1 ≤ N ≤ 20) 둘째 줄에는 전체 학생의 총 추천 횟수가 주어지고, 셋째 줄에는 추천받은 학생을 나타내는 번호가 빈 칸을 사이에 두고 추천받은 순서대
www.acmicpc.net
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: " "))