본문 바로가기

알고리즘/프로그래머스

[프로그래머스][Python] 위장

조합을 이용했다.

(조합은 서로 다른 n개에서 순서에 상관없이 r개를 선택하는 것이다.)

 

예를 들어보자.

2개의 모자 종류와 1개의 안경은 종류가 있다.

아래와 같이 경우의 수를 구할 수 있다.

 

 

 

 

문제에서 '스파이는 하루에 최소한 한 개의 의상은 입습니다'라고 했다.

따라서 아무것도 안 입는 경우를 제외시켜야 한다.

빨간색으로 표시한 부분이 그 부분이다.

 

(Π (의상 종류 + 1)) - 1

식은 이와 같다. 

 

 

def solution(clothes):
    dic = {}
    for li in clothes:
        c, k = li
        if dic.get(k, 0):
            dic[k] += 1
        else:
            dic[k] = 2

    answer = 1
    for val in dic:
        answer *= dic[val]

    return answer - 1

 

 

dic[k]의 초깃값이 1이 아닌 이유는 안 입는 경우도 초깃값에 넣어놨기 때문이다. (의상 종류에 1를 더하는 이유와 같다.) 

그리고 dic에서 개수를 구하는 부분에 Counter를 써도 됐을 것 같다.