sm 기술 블로그
114. 9375 (패션왕 신해빈) 본문
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