- 경우의 수를 구하는 문제이므로 해시를 사용해서 푼다!
- 의상의 종류를 키로 같은 종류의 의상 수를 값으로 하는 해시 자료구조를 만든다.
- 모든 경우의 수 = (1번 의상 종류의 의상 수 + 1) (2번 의상 종류의 의상 수 + 1) ... (n번 의상 종류의 의상 수 + 1) 의 공식을 활용해 전체 경우의 수를 구한다.
=> 각 카테고리의 의상 수에 1을 더한 것은 아무것도 입지 않았을 경우를 뜻한다.- (위 사진에선 잘렸지만) 스파이가 하루에 최소 하나의 옷은 입는다고 가정하고 있으므로 아무것도 입지 않는 경우를 빼주는 의미로 -1 한다.
from collections import Counter
def solution(clothes):
answer = 1
kinds = Counter(i[-1] for i in clothes)
for i in kinds.values():
answer *= (i+1)
return answer - 1
def solution(clothes):
closet = {}
for name, kindOf in clothes:
if(kindOf in closet):
closet[kindOf] = closet.get(kindOf) + 1
else:
closet[kindOf] = 1
result = 1;
for v in closet.values():
result *= (v+1)
return result-1
자바스크립트로 문제를 풀어오다가 오랜만에 파이썬으로 풀어보니 헷갈리지만 라이브러리 사용하지 않고 푸는게 좀 편해진 것 같기도 하다.
✔️ reduce() 사용
import collections
from functools import reduce
def solution(c):
return reduce(lambda x,y:x*y,[a+1 for a in collections.Counter([x[1] for x in c]).values()])-1
코드 순서 : ③reduce( lambda, ②Counter(①).values() ) ④ - 1
Counter 내부(①)에서 의상 종류에 따른 의상 수를 카운트한 뒤 Counter 외부(②)의 for문에서 각 값들을 1씩 증가한다. reduce(③)에서 배열 안의 값들을 모두 곱한다. 마지막(④)으로 아무 옷을 입지 않은 경우를 빼준다.