PS/프로그래머스

[Python] 의상

s_omi 2024. 12. 9. 09:56
728x90
반응형
SMALL

✏️ 문제

 

문제 파악

각 의상들은 입는 방법이 2가지로 나뉜다.

  1. 입는다.
  2. 안입는다. 

하지만 코니는 최소 한 개의 이상을 입으므로 전부 안입는 경우는 치지 않으므로 마지막 결과값에 -1을 해주어야 한다.

 

예시 1번을 보면 

headgear

1. 두 개 다 안쓴다.
2. yellow_hat 쓰고 green_turban 안쓴다.
3. green_turban 쓰고 yellow_hat 안쓴다.
eyewear

1. 안쓴다.
2. blue_sunglasses 쓴다

 

경우의 수는 해당 의상의 종류 + 1(안쓴다) 인 것으로 알 수 있다.

그리고 우리가 구하는 조합의 수는 3(headgear의 경우의 수) * 2(eyewear의 경우의 수) - 1(아무것도 안입는 경우) = 5 이다.

이 계산식을 근거로 코드를 짜면 된다.

 

 

코드

from collections import defaultdict

def solution(clothes):
    answer = 1
    dic = defaultdict(int)
    
    for c in clothes:
        dic[c[1]] += 1
    for count in dic.values():
        answer *= (count + 1)  
    
    return answer - 1
  • 다른 사람의 코드
def solution(clothes):
    clothes_type = {}

    for c, t in clothes:
        if t not in clothes_type:
            clothes_type[t] = 2
        else:
            clothes_type[t] += 1

    cnt = 1
    for num in clothes_type.values():
        cnt *= num

    return cnt - 1

이 분의 코드가 더 간단해 보이는데 해석하면 다음과 같다. 

clothes_type에 처음 넣으면(not in)

1. 입는다. 2. 안입는다. 로 두 가지의 경우의 수가 나오므로 2를 넣고 

clothes_type에 이미 다른 옷이 있으면(in) (예를 들어 넣어서 2개가 된다면)

1. 1번째 옷을 입는다. 2. 2번째 옷을 입는다. 3. 둘다 안입는다. 로 세 가지 경우의 수가 나오므로 +1을 한다.

728x90
반응형
LIST

'PS > 프로그래머스' 카테고리의 다른 글

[Python] 피로도  (0) 2024.12.10
[Python] 프로세스  (0) 2024.12.10
[Python] n^2 배열 자르기  (0) 2024.12.09
[Python] 카펫  (1) 2024.11.08
[Python] 영어 끝말잇기  (0) 2024.11.08