라벨이 dailycoding인 게시물 표시

[dailycoding] 위장

이미지
[dailycoding] 위장 문제 clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다. 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다. 같은 이름을 가진 의상은 존재하지 않습니다. clothes의 모든 원소는 문자열로 이루어져 있습니다. 모든 문자열의 길이는 1 이상 20 이하인 자연수이고 알파벳 소문자 또는 ‘_’ 로만 이루어져 있습니다. 스파이는 하루에 최소 한 개의 의상은 입습니다. 입출력 예 clothes return [[yellow_hat, headgear], [blue_sunglasses, eyewear], [green_turban, headgear]] 5 [[crow_mask, face], [blue_sunglasses, face], [smoky_makeup, face]] 3 해결의 과정 문제는 단순히 수학문제에서 마주할 수 있는 조합의 문제이다. 옷의 종류가 a,b,c가 있다면 a b c가지가 있다. 하지만 옷을 입지 않은 가짓수도 있기 때문에 (a+1)(b+1)(c+1) 가지의 조합이 나온다. 마지막으로 하나도 입지 않은 가짓수는 제외해야하기 때문에 (a+1)(b+1)(c+1) - 1 을 계산한다. 입력 받은 옷 중에 같은 이름은 없기 때문에 결국 옷 종류별로 몇개씩 있는지만 고려하면된다. 옷 종류별로 몇벌씩 가지고있는지 계산한다. 종류별 옷을 전부 +1 한뒤 곱한다. 마지막에 -1을 해준다. import Foundation func solution(_ clothes:[[String]]) -> Int { var clothType : [String : Int] = [:] var answer = 1 clothes.forEach {item in // 옷 종류별 갯수를 계산한다. if clothType.keys.contains(item[1]){