아이디어
프로그래머스의 스파이 문제와 같다! 마찬가지로 딕셔너리를 이용하여 풀었다. 이 문제에서 옷의 종류는 중요하지만 옷의 이름은 중요하지 않다. 중복이 없으므로 어차피 다른 종류가 들어올 것이다.
1. 딕셔너리에 해당 옷 종류가 없으면 0으로 초기화한다.
2. 들어오는 문자열을 분석해서 옷의 종류에 따라 값을 증가시킨다. ([ "headgear": 1, eyewear: 2 ] 이런 식으로 들어감)
3. 머리나 얼굴에 아무것도 안 쓴 상태가 존재할 수도 있다. 이를 위해 각 케이스에 1을 더하여 딕셔너리에 있는 경우의 수를 모두 곱한다.
4. 하지만 알몸인 상태가 있으면 안 되므로 결과값에서 1을 빼고 출력한다.
해답
import Foundation
let N = Int(readLine()!)!
var clothesTypes: [String:Int] = [:]
for _ in 0 ..< N {
clothesTypes.removeAll()
let M = Int(readLine()!)!
for _ in 0 ..< M {
let cloth = readLine()!.components(separatedBy: " ").map { String($0) }
if !clothesTypes.keys.contains(cloth[1]) {
clothesTypes[cloth[1]] = 0
}
clothesTypes[cloth[1]]? += 1
}
var cnt = 1
for num in clothesTypes.values {
cnt *= (num + 1)
}
print(cnt - 1)
}
'Algorithm > 백준' 카테고리의 다른 글
[백준 스위프트] 15965번 K번째 소수 (0) | 2022.08.30 |
---|---|
[백준 스위프트] 1302번 베스트셀러 (0) | 2022.08.24 |
[백준 스위프트] 5525번 IOIOI (0) | 2022.08.24 |
[백준 스위프트] 1764번 듣보잡 (0) | 2022.07.25 |
[백준 스위프트] 11399번 ATM (0) | 2022.07.25 |