곧죽어도 콛잉

[프로그래머스 / Python] 의상 본문

Coding Test/Python

[프로그래머스 / Python] 의상

코드진행형 2024. 2. 26. 15:38

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

이거는 수학적 지식이 필요하다.

 

인풋아웃풋 예시를 읽어보면, 

[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]

이럴때, headgear의 경우 2가지, eyewear 1가지 해서 총 2*1 가지의 경우의 수가 나온다.

그런데 꼭 2가지 다 쓸필요는 없으니, headgear를 안쓰는경우를 추가해서 headgear 3가지, eyewear를 안쓰는 경우를 추가해서 eyewear 2가지, 총 3*2 가지의 경우의 수가 나온다.

 

이렇게 계산한 경우 headgear, eyewear 모두 안쓰는 경우의 수도 포함되므로 1가지를 빼줘서 총 5가지라고 할 수 있다.

 

def solution(clothes):
    answer = 1
    dic = {}
    for i in clothes:
        if dic.get(i[1]) :
            dic[i[1]].append(i[0])
        else :
            dic[i[1]] = [i[0]]
            
    
    for k in dic:
        answer *= (len(dic[k])+1)
    return answer-1

 

 

다른 코드를 보면 reduce 함수와 Counter로 위 과정을 간략하게 표현할수도 있다

 

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
Comments