입을 경우, 현재 부위에 속하는 옷 개수 만큼의 경우가 가능하고, 입지 않는 경우는 1 가지만 있다.
따라서 (현재 부위 옷의 개수 + 1)을 통해서, 모든 위장 경우의 수를 표현할 수 있다.
최소 1 개의 의상은 입어야 하기 때문에, 마지막에 1을 빼주면 전체 경우의 수를 얻을 수 있다.
# n, m, k, l
# nC1, mC1, kC1, lC1 -> n, m, k에 대한 선택
# 종류가 많은 경우 -> 시간 초과가 발생할 것 -> 어떻게 계산???...
from collections import defaultdict
def solution(clothes):
# 조합의 개수
answer = 1
cloth_info = defaultdict(list)
# type 별 옷 정리하기
for c, c_type in clothes:
cloth_info[c_type].append(c)
# 옷 조합 = (해당 부위 옷을 입은 경우 + 안 입은 경우)
for c_type, c in cloth_info.items():
answer *= (len(c) + 1)
# 아무것도 입지 않은 경우 제외
answer -= 1
return answer