728x90
반응형
옷 종류를 겹치지 않게 입는 경우의 수에 대한 문제이다.
func solution(_ clothes: [[String]]) -> Int {
var res: Int = 1
let clothesMapped = clothes.compactMap {($0.last,1)}
let cnt = Dictionary(clothesMapped, uniquingKeysWith:+)
for (_,value) in cnt {
res *= (value+1)
}
return res - 1
}
[프로세스]
1. 결과를 담을 res 변수를 생성한다.
2. [[String]] 배열에 .compactMap
을 적용한다.
2-1. [[String]] 내에 [String]을 $0을 통해 불러온다.
2-2. Clothes Type이 위치한 배열의 마지막을 불러오기 위해 .last
메서드를 사용한다.
2-3. 불러오는 동시 counting을 위해 1을 붙여 배열을 생성한다. [(optional:Int)]
3. Dictionary 내 uniquingKeysWith
파라미터를 활용하여 Keys에 대해 counting(+)을 한다.
4. cnt Dictionary 내에 value들만 불러와 res에 값을 축적한다.
4-1. ((종류A + 1) * (종류B + 1) * ...) - 1 의 결과 도출
[추가 정보]
.compactMap
= 옵셔널 바인딩, nil 값 제거 (in 1차원 배열)
.flatMap
= n차원을 n-1 차원으로 flatten 처리함
.map
= 배열의 각 요소에 대해 값을 변경하고자 할 때 사용
728x90
반응형