[프로그래머스] 위장 (Python)

2022. 5. 13. 02:54알고리즘 & 자료구조

반응형

💁🏻 나의 풀이

def solution(clothes):
    answer = 1
    items = {}

    for item, category in clothes:
        if category not in items:
            items[category] = []
        items[category].append(item)

    for k in items.keys():
        answer *= len(items[k])+1

    return answer-1
  • 종류를 key로, 리스트를 item으로 갖는 dict에 모든 옷을 넣음
  • 종류별로 최대 하나씩만 입을 수 있기 때문에 각 종류별 옷의 개수 + 1모두 곱한 값 - 1
  • 각 종류별 옷의 개수 + 1 = 각 옷을 입는 경우 + 하나도 안입는 경우
  • 모두 곱한 값 - 1 = 모든 경우의 수 - 하나도 안입는 경우

👀 다른 사람 풀이

🔗 https://programmers.co.kr/learn/courses/30/lessons/42578/solution_groups?language=python3
def solution(clothes):
    from collections import Counter
    from functools import reduce
    cnt = Counter([kind for name, kind in clothes])
    answer = reduce(lambda x, y: x*(y+1), cnt.values(), 1) - 1
    return answer
  • 거의 유사한 풀이 방식
  • dict로 배열을 전부 옮기지 않고, Counter로 각 카테고리의 개수만 구함

📚 What I Learned

functools.reduce

  • “여러 개의 데이터를 대상으로 주로 누적 집계를 내기 위해서 사용하는 함수”
  • for loop를 간소화해서 사용할 수 있는 함수
  • 초기값 세팅도 할 수 있어서 간편해 보임
반응형