본문 바로가기
Programming/Programmers

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

by 데이터현 2021. 10. 29.

https://programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

각 옷의 종류에 따라 dict를 초기화하고, 그 옷의 조합인 (N+1)*(M+1) -1 하면 된다. (-1은 모든 옷 종류 꺼내지 않았을 경우는 인정되지 않으므로 하나 빼 주는 것)

 

나의 풀이

from collections import defaultdict
def solution(clothes):
    answer = 1
    cloth_dict = defaultdict(list)
    for cloth in clothes:
        cloth_dict[cloth[1]].append(cloth[0])
    for cloth in cloth_dict.values():
        answer *= (len(cloth)+1)
    return answer -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

Counter 활용해서 각 옷 종류에 따라 개수를 세주고

reduce로 옷 개수에 따라 곱해주는 함수를 활용한 깔끔한 풀이라 가져왔다.

 

댓글