풀이법을 간단히 정리해 놓으신 분이 있어서 이해가 한결 편했다.
여러 종류의 옷이 있고 각 종류별로 1개 이하를 입을 수 있다면 몇 가지의 옷이 가능하냐는 문제이다.
약간 이상하긴 하지만, 위 예제에 따르면 yellow_hat만 입은 것도 옷을 입은 것으로 친다고 하는 것을 보아, 여러 종류 중 하나만이라도 입은 상태도 포함하여 모든 경우의 수를 계산하는 문제이다.
그렇다면 총 3 x 2 가지의 경우의 수 인 6가지가 존재하고, 이 중 한 가지는 headgear도 입지 않고 eyewear도 입지 않은 경우가 되기 때문에 이 경우를 제외하 5가지가 정답이 되게 된다.
이를 컴퓨터 프로그램으로 짜서 컴퓨터에게 일을 시키기 위한 방법은 두 가지가 떠오른다.
해결책 1 : 해시를 통해 각 type 별로 가짓수를 계산하고, 총 경우의 수를 산출한다.
해결책 2 : Counter를 활용해서 위의 동작을 조금 더 쉽게 작성해본다
def solution(clothes):
dict1 = {}
for k,v in clothes:
dict1[v] = dict1.get(v,0) + 1
answer = 1
for type,v in dict1.items():
answer *= dict1[type] +1
return answer-1
# &
from collections import Counter
from functools import reduce
def solution(clothes):
return reduce(lambda x,y:x*y,[a+1 for a in Counter(tmp[1] for tmp in clothes).values()]) -1