Where who wants to meet someone
백준 Swift [10816] 숫자 카드 2 본문
728x90
난이도
실버 IV
문제
https://www.acmicpc.net/problem/10816
내 답안
let n = Int(readLine()!)!
var cards = [Int : Int]()
let input = readLine()!.split(separator: " ").map { Int($0)! }
input.forEach { card in
if cards[card] != nil {
cards[card]! += 1
} else {
cards[card] = 1
}
}
let m = Int(readLine()!)!
let tests = readLine()!.split(separator: " ").map { Int($0)! }
tests.forEach { test in
cards[test] == nil ? print("0", terminator: " ") :
print(cards[test]!, terminator: " ")
}
- 문제를 읽고, 갯수 카운팅이면 숫자와 갯수를 쌍으로 하는 딕셔너리를 사용하면 되겠다 생각이 들었고
input값을 forEach로 돌면서 cards에 값이 없으면 1을 추가, 있으면 기존 값에 1을 더하는 식으로 처리를 했다.
이후 검증해야 하는 test를 역시 forEach로 돌면서 없는 값이면 0을, 있는 값이면 그 값을 출력하는 방식으로 마무리 하였다.
- 처음에는 마지막 출력 부분에서 filter, value, first를 사용했는데 시간 초과가 났다. 이전 문제에서 해당 부분 또는 딕셔너리 저장하는 쪽에서 시간이 오래 걸린다는 것을 경험했기 때문에 그것을 수정하고자 했고, 이번에는 딕셔너리를 하나 더 추가하는 방식 대신 nil이면 0을, nil이 아니면 cards[test]를 통해 값을 추가하도록 변경하여 통과할 수 있었다.
- 딕셔너리의 값을 얻기 위해 그냥 dictionary[key] 를 하면 되는데 자꾸 dictionary.filter { $0.key == key }.values.first 를 무의식적으로 쓰는 것 같다.. 고칠 점!
'백준 알고리즘 문제 기록 > 집합과 맵' 카테고리의 다른 글
백준 Swift [1269] 대칭 차집합 (0) | 2023.08.11 |
---|---|
백준 Swift [1764] 듣보잡 (0) | 2023.08.11 |
백준 Swift [1620] 나는야 포켓몬 마스터 이다솜 (0) | 2023.08.11 |
백준 Swift [7785] 회사에 있는 사람 (0) | 2023.08.08 |
백준 Swift [14425] 문자열 집합 (0) | 2023.08.08 |