의상의 이름과 종류 쌍들이 배열형태로 주어질 때, 의상의 종류별로 중복없이 최소 한 개 이상 착용할 수 있는 경우의 수를 반환하는 함수 작성
def solution(clothes):
dic = {}
for item, category in clothes:
if category not in dic:
dic[category] = [item]
else:
dic[category].append(item)
cnt = 1
for cat in dic
cnt *= len(dic[cat]) + 1
return cnt - 1
collections
의 defaultdict
을 이용하여 로직 단순화from collections import defaultdict
def solution(clothes):
cnt = 1
c_dict = defaultdict(list)
for item, category in clothes:
c_dict[category].append(item)
for cat in c_dict:
cnt *= len(c_dict[cat]) + 1
return cnt - 1
clothes
는 [["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]]
형태로 주어지며, 이는 [장비 이름, 종류] 형태.clothes
배열을 for
Loop으로 순회하며 해당 개체 정보를 dict()
타입 변수 dic
에 저장dic
내부에 존재하지 않을 경우 배열의 형태로 장비 이름 추가cnt
초기값을 설정하되, 다양한 종류의 조합을 계산하는 방법은 곱연산이므로, 초기값은 1로 설정dic
를 순회하며 키(종류) 별 값(이름)의 수에 1을 더한 값(해당 장비를 착용하지 않았을 때 포함)을 cnt
에 곱함