Algorithm/백준

[백준 스위프트] 9375번 패션왕 신해빈

devKen 2022. 8. 24. 09:25

아이디어

프로그래머스의 스파이 문제와 같다! 마찬가지로 딕셔너리를 이용하여 풀었다. 이 문제에서 옷의 종류는 중요하지만 옷의 이름은 중요하지 않다. 중복이 없으므로 어차피 다른 종류가 들어올 것이다. 

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)
}