간단한 문제 요약
오늘 하루 동안 팔린 책의 제목이 입력으로 들어왔을 때, 가장 많이 팔린 책의 제목을 출력하는 프로그램을 작성하시오.
고려해야 할 사항
- 책은 가장(최대) 많이 팔린 책의 이름이 출력되야 하는데, 가장 많이 팔린 책의 개수가 같다면, 사전순(최소)으로 가장 앞서는 제목 출력해야 합니다.
문제 풀이, 새로 배운 개념
팔린 책들 중 이름이 같은 책이 있기에, 배열로 저장하기 보단 딕셔너리로 저장했습니다. 그리고 max함수를 통해, value가 같을 경우에는 key값이 작은 순으로, value가 다르다면 value가 큰 순으로 출력을 하도록 했습니다.
var list: [String:Int] = [:]
저는 딕셔너리의 key값이 nil일 경우 딕셔너리에 없던 새로운 책이라 판단후 새로운 값을 부여했습니다.
_=(0..<Int(readLine()!)!).map{ _ in
let s=readLine()!
guard let v = list[s] else {
list[s] = 1
return
}
list[s] = v+1
}
그런데 딕셔너리에는 키가 없을 경우 디폴트 값을 부여하는 subscript가 있었습니다.
autoclousre 덕분에 list[s,default: {0}] 이렇게 하지 않고 list[s, default: 0] 이렇게 딕셔너리에 일치하는 키가 없다면 값을 0으로 부여할 수 있었습니다.
_=(0..<Int(readLine()!)!).map{ _ in list[readLine()!, default: 0] += 1 }
코드
var list: [String:Int] = [:]
_=(0..<Int(readLine()!)!).map{ _ in list[readLine()!, default: 0] += 1 }
print(list.max { return $0.value==$1.value ? $0.key>$1.key : $0.value<$1.value }!.key)
'백준 PS일지 > String' 카테고리의 다른 글
[백준/Swift] 모음의 개수: 1264 | PS일지 (0) | 2023.07.05 |
---|---|
[백준/Swift] 6550: 부분 문자열 | PS일지 (0) | 2023.04.21 |
[백준/Swift] 144256: 접두사 찾기 | PS일지 (0) | 2023.04.18 |
[백준/Swift] 4354: 문자열 제곱 | PS일지 (0) | 2023.02.10 |