sm 기술 블로그

114. 9375 (패션왕 신해빈) 본문

문제/백준_파이썬

114. 9375 (패션왕 신해빈)

sm_hope 2022. 6. 27. 19:20
import sys
input = sys.stdin.readline

T = int(input())

result = ""

for _ in range(T):
    n = int(input())
    clothes = [input().split()[1] for _ in range(n)]
    clothesType = {}

    for val in clothes:
        if val in clothesType:
            clothesType[val] += 1
        else:
            clothesType[val] = 1

    tmp = 1

    for val in clothesType:
        tmp *= (clothesType[val]+1)

    result += str(tmp-1) + "\n"

print(result)

문제요약

옷을 입는 경우의 수를 구하라.

설명

만약 6개의 옷이 있다고 하자.

먼저 옷의 종류의 경우의 수를 구해보자.

 

head 3가지 , eyewear 3가지, face 3가지의 경우의 수가 나온다.

이제 이 모든 경우의 수를 곱해주면 된다.

 

곱해주는 이유는 1번 head 를 고르고, 1번 eyewear를 고를 경우, 2번 eyewear를 고를 경우, 없음을 고를경우 총 3가지 이고 head는 3가지의 경우를 지녔으므로 위를 3번 반복한다.

 

그러면 3 * 3 * 3 = 27이 나오고 마지막에 없음만 고르는 경우(알몸인 상태)는 빼주어야 하므로 -1을 해주면 26이 나온다.

 

   clothes = [input().split()[1] for _ in range(n)]

입력 형식은

hat headgear

이다.

여기서 headgear만 뽑아서 clothes에 저장해 준 것이다.

 

   for val in clothes:
        if val in clothesType:
            clothesType[val] += 1
        else:
            clothesType[val] = 1

옷의 종류의 수를 구한 것이다.

딕셔너리 형태(map) 형태로 각 종류의 개수를 구해줄 것이다.

위에서 설명한 입력값이 들어오면

다음과 같이 정리된다.

 tmp = 1

    for val in clothesType:
        tmp *= (clothesType[val]+1)

옷의 종류에서 없음을 더해 각 옷별로 최종 경우의 수를 구하고 곱해 준 것이다.

 

result += str(tmp-1) + "\n"

한번에 출력하기 위해서 result에 값을 저장하고 -1은 모두 없음을 고른경우(알몸인 상태)를 빼준 것이다.

'문제 > 백준_파이썬' 카테고리의 다른 글

116. 2004(조합 0의 개수)  (0) 2022.06.27
115. 1676(팩토리얼 0의 개수)  (0) 2022.06.27
113. 1010 (다리놓기)  (0) 2022.06.26
112. 11051(이항 계수 2)  (0) 2022.06.26
111. 11050 (이항계수 1)  (0) 2022.06.26
Comments