[Swift 알고리즘] 의상 갈아입기 알고리즘 문제 풀이

우리 제미나이님

TIL 20일 차 - 프로그래머스 Swift 의상 갈아입기 알고리즘 문제 풀이

프로그래머스 해시 [의상 갈아입기 문제] 링크

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

이 문제는 딕셔너리를 이용해 옷의 종류를 key, 각 의상의 이름들은 value로 매핑하고 각 key에 매핑된 value의 개수를 구하면 쉽게 풀리는 문제이다.
 

 
1. 먼저 solution 함수에 key는 String, value는 Int인 빈 딕셔너리 dictionary변수를 선언해 주자

func solution(_ clothes:[[String]]) -> Int {
	var dictionary: [String: Int] = [:]
}

 
 
2. 함수의 입력값인 2차원 배열 clothes를 name과 category로 분류해 각 category별 name의 개수를 dictionary에 넣어주는 반복문을 만들어주자

// 함수 선언부 생략
for item in clothes {
    let name = item[0]
    let category = item[1]
    dictionary[category, default: 0] += 1 // category의 값이 +1씩 증가 (디폴트 값: 0)
}

 
 
 
이때 코니는 하루에 최소 한 개의 의상을 입는다는 조건이 있으므로
답: 전체 경우의 수 - 1(아무것도 입지 않는 경우의 수 = 1)이다.
이때 전체 경우의 수는 예를 들어 하의의 종류가 2개 (청바지와 카고바지)라면
+ 바지를 안 입는다.
+ 청바지를 입는다.
+ 카고바지를 입는다.
총 3가지로 (n+1) 가지의 경우의 수가 생긴다.
 
그런데 각 부위별 의상은 '동시에' 입는 것이므로 각각의 경우의 수를 곱하기(*)로 연산해 주면 된다.
 
3. 이렇게 딕셔너리에서 카테고리별 의상 개수인 값(value)을 추출하여 1을 더해주고 곱해주는 연산을 하면 끝난다.

var result = 1

for (_, value) in dictionary {
	result += (value + 1)
}

return result - 1 // 옷을 무조건 하나는 입어야 함

 
 
 
최종 작성한 답 코드

import Foundation

func solution(_ clothes:[[String]]) -> Int {
    var dictionary: [String: Int] = [:]
    var result = 1
    
    for item in clothes {
        let name = item[0]
        let category = item[1]
        dictionary[category, default: 0] += 1
    }    
    
    for (_, value) in dictionary {
        result *= (value + 1)
    }
    
    return result - 1
}