👨🏻‍💻iOS 공부/Swift_알고리즘 풀이

[프로그래머스] 해쉬 - 위장

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
반응형