본문 바로가기
Algorithm/프로그래머스

[프로그래머스] 위장 (level 2) Python 문제 풀이

by daewooki 2021. 6. 19.
반응형

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr

문제 풀이

1. 같은 이름을 가진 의상은 존재하지 않으므로 딕셔너리에 key는 의상의 종류, value는 count를 넣어준다.

2. value를 돌면서 (count+1)을 전부 곱해서 모든 가능한 경우를 구한다.

3. 아무것도 안 입은 경우를 제외시켜야 하므로 1을 뺀 값을 return 한다.

 

왜 count별로 +1을 해서 곱하는지 이해를 못하는 분들이 많던데 의상 종류별로 의상의 갯수에서 아무것도 안 입는 경우가 있을 수 있으니 +1을 해주는 것이다. 

ex) (모자 갯수 + 안 입음(1)) * (안경 갯수 + 안 입음(1)) - 1

 

파이썬 코드

def solution(clothes):
    clothes_dict = {}
    
    for cloth in clothes:
        if cloth[1] in clothes_dict:
            clothes_dict[cloth[1]] += 1 
        else:
            clothes_dict[cloth[1]] = 1

    answer = 1
    for i in clothes_dict.values():
        answer *= (i+1)
        
    return answer-1

 

비교적 쉬운 문제이다. 아무것도 입지 않았을 때 +1을 해서 곱하는 부분을 모르겠다면  몇 가지 테스트 케이스를 직접 계산해보면 공식을 쉽게 알 수 있을 것이다.

반응형

댓글