정글에서 온 개발자

[프로그래머스] 의상. 다양한 python 모듈 활용 본문

알고리즘

[프로그래머스] 의상. 다양한 python 모듈 활용

dev-diver 2024. 5. 14. 10:24

코드

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 라이브러리가 많다.