의상 문제 바로가기

나의 풀이

def solution(clothes):
    wardrobe = {}
    for c in clothes:
        if c[1] in wardrobe:
            wardrobe[c[1]] += 1
        else:
            wardrobe[c[1]] = 1
    temp = 1
    print(wardrobe.values())
    for i in list(wardrobe.values()):
        temp *= (i+1)
    return temp-1

고수의 풀이

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

CODE REVIEW

  1. 옷입히기 게임같은 문제. (의상 종류+1)를 각각 곱해주고 마지막에 1을 빼면 답이 나온다.
  2. reduce() 메소드은 처음 보는데 python docs에서 관련 정보를 찾을 수 있었다. 어떤 iterable한 것에서 single value가 될 때 까지 과정을 반복하는 메소드이다.
    • for문을 축약해주긴 하지만 가독성이 떨어져서 자주 사용할 것 같진 않다. 일단 알아두자!