코드
from collections import Counter
import math
def solution(clothes):
c = Counter(x[1] for x in clothes)
product = math.prod(c[p]+1 for p in c)
return product-1
- 메인 아이디어는 각 파츠별로 안입은 것까지 포함해서 조합으로 경우의 수를 센 후, 하나도 안 입은 경우 1가지를 빼주는 것이다.
- count만 할 거라 hash count 특화 객체인 Counter를 활용했다.
- math.prod가 sum 처럼 iterable의 곱셈을 해줘서 활용했다.
배운것들
counter.values()
- counter의 값들을 가공할 필요 없이 바로 쓸 수 있다면, 이 속성을 활용해도 좋겠다.
functools.reduce
- javascript의 reduce랑 같은 함수가 있었다! 사용법은 자바스크립트와 거의 동일하다.
- functools는 고차 함수에 대한 지원을 위해 있는 모듈이라고 한다.
- 내가 저번에 활용한 함수는 cmp_to_key 였다.
operator.mul
- reduce와 조합돼서 좋은 함수다.
- operator.mul 자체가 * 연산을 나타내기 때문에, lambda x,y:x*y 라고 길게 쓰는 대신 입력할 수 있다.
종합 코드
- import가 많아지긴 하지만 새로 배운 세 개를 조합하면 다음과 같은 코드를 쓸 수 있다.
from collections import Counter
from functools import reduce
from operator import mul
def solution(clothes):
c = Counter(x[1] for x in clothes)
m = reduce(mul,[v+1 for v in c.values()])
return m-1
복기
- 최근에 공부한 Counter 바로 활용돼서 좋았다.
- 그리고 아직도 몰랐던 python 라이브러리가 많다.