[Python3] 프로그래머스 위장(reduce, Counter)

민갱·2023년 7월 6일

CT

목록 보기
23/35

풀이법을 간단히 정리해 놓으신 분이 있어서 이해가 한결 편했다.

위장

문제 접근 방식

여러 종류의 옷이 있고 각 종류별로 1개 이하를 입을 수 있다면 몇 가지의 옷이 가능하냐는 문제이다.

약간 이상하긴 하지만, 위 예제에 따르면 yellow_hat만 입은 것도 옷을 입은 것으로 친다고 하는 것을 보아, 여러 종류 중 하나만이라도 입은 상태도 포함하여 모든 경우의 수를 계산하는 문제이다.

아래 내용이 Key!

  • headgear는 총 2개 있으니, 스파이에게는 총 3가지의 경우의 수가 있다.
    • 1번을 입는다.
    • 2번을 입는다.
    • headgear를 아무것도 입지 않는다.
  • eyewear는 총 1개 있으니, 스파이에게는 총 2가지의 경우의 수가 있다.
    • 1번을 입는다.
    • eyewear를 입지 않는다.

그렇다면 총 3 x 2 가지의 경우의 수 인 6가지가 존재하고, 이 중 한 가지는 headgear도 입지 않고 eyewear도 입지 않은 경우가 되기 때문에 이 경우를 제외하 5가지가 정답이 되게 된다.
이를 컴퓨터 프로그램으로 짜서 컴퓨터에게 일을 시키기 위한 방법은 두 가지가 떠오른다.

해결책 1 : 해시를 통해 각 type 별로 가짓수를 계산하고, 총 경우의 수를 산출한다.
해결책 2 : Counter를 활용해서 위의 동작을 조금 더 쉽게 작성해본다


def solution(clothes):
    dict1 = {}
    for k,v in clothes:
        dict1[v] = dict1.get(v,0) + 1
    answer = 1
    for type,v in dict1.items():
        answer *= dict1[type] +1    
    return answer-1

# &
from collections import Counter
from functools import reduce
def solution(clothes):
    return reduce(lambda x,y:x*y,[a+1 for a in Counter(tmp[1] for tmp in clothes).values()]) -1
profile
가보자고

0개의 댓글