Where who wants to meet someone
백준 Swift [20920] 영단어 암기는 괴로워 본문
728x90
난이도
실버 III
문제
https://www.acmicpc.net/problem/20920
내 답안
var wordDictionary = [String : Int]()
let input = readLine()!.split(separator: " ").map { Int($0)! }
let n = input[0]
let m = input[1]
for _ in 1...n {
let word = readLine()!
if word.count >= m {
wordDictionary[word, default: 0] += 1
}
}
let sortWordDictionary = wordDictionary.sorted { first, second in
if first.value == second.value && first.key.count != second.key.count {
return first.key.count > second.key.count
} else if first.value == second.value && first.key.count == second.key.count {
return first.key < second.key
} else {
return first.value > second.value
}
}
let results = sortWordDictionary.map { $0.key }
results.forEach { result in
print(result)
}
- Dictionary를 사용해야 함은 알았지만 조건을 어떻게 줄지 까다로웠던 문제.
- 단어를 담을 wordDictionary 빈 Dictionary 생성
- 맨 처음 input값을 n과 m으로 분리
- n만큼 for문을 돌면서 word를 받고, 그 word 글자수가 m 이상이면 wordDictionary에 값을 +1 해서 추가
- 대망의 Dictionary filter
4-1. 기존의 sorted는 { $0.value ~ } 이런식으로 사용했는데 여기서는 조건을 다 다뤄야 하므로 first, second 인자를 사용하여 처리
4-2. 비교하는 두 값의 value가 같은데 글자수가 다르다면(2번 조건) key의 글자수에 따라 정렬
4-3. 비교하는 두 값의 value가 같고 글자수도 같다면(3번 조건) key를 사전 순으로 정렬
4-4. 그 외에는(두 값의 value가 다른 경우, 1번 조건) 비교하는 두 값의 value에 따라 정렬 - results에 4번의 결과물을 map을 통해 key만 뽑아서 저장
(4번 결과물은 [(key: String, value: Int)] 형식이므로) - 5번의 results를 forEach로 돌면서 각 항목을 출력
'백준 알고리즘 문제 기록 > 심화 2' 카테고리의 다른 글
백준 Swift [2108] 통계학 (0) | 2023.09.12 |
---|---|
백준 Swift [26069] 붙임성 좋은 총총이 (0) | 2023.09.11 |
백준 Swift [25192] 인사성 밝은 곰곰이 (0) | 2023.09.11 |
백준 Swift [1037] 약수 (0) | 2023.09.11 |