728x90


📌  풀이

약간의 수학적 사고를 해야 풀리는 문제이다.

우선 나는 딕셔너리의 성격과 수학의 경우의 수를 조합하여 문제를 풀었다.

 

우선 옷의 종류에 따라 몇 가지가 있는지 파악한다. 

answer = {}
for cloth in clothes:
    if cloth[1] in answer:
        answer[cloth[1]] += 1
    else:
        answer[cloth[1]] = 1
        
        
...
colthes = [["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]]
라면
answer = {'headgear': 2, 'eyewear': 1}

 

이제 각 옷의 종류의 개수를 알았으니 경우의 수를 이용하여 푼다.

이전에 입을 수 있는 옷의 경우의 수를 구하는 문제를 풀었던 기억이 있을 것이다.

 

 

여기서 그러한 문제와 한가지 다른 것은 옷의 각 경우에 옷을 입지 않는 X의 경우가 있고

옷을 전부 입지 않는 경우는 빼줘야 하므로 마지막에 -1을 해준다는 것이다.

이해하기 쉽게 그림을 만들어 보았다.

그림과 함께 전체 코드를 확인해 보면 다음과 같다.

 

예제 1의 경우

 

예제 2의 경우

코드

def solution(clothes):
    answer = {}
    for cloth in clothes:
        if cloth[1] in answer:
            answer[cloth[1]] += 1
        else:
            answer[cloth[1]] = 1

    cnt = 1
    for i in answer.values():
        cnt *= (i + 1)
    return cnt - 1

 

 

 

📌  추가 (Counter함수 이용)

우리는 코드에서 옷의 종류의 개수를 알기 위해 파이썬의 딕셔너리를 이용했지만 collections의 Counter 함수를 사용하면 한 줄로 간편하게 구할 수 있다.

from collections import Counter

clothes = [["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]]

cnt = Counter([kind for name, kind in clothes])
print(cnt)

...
Counter({'headgear': 2, 'eyewear': 1})

 

 

 

 

 

 

 

 

 

 

복사했습니다!