같은 종류의 의상은 하나씩만 착용할 수 있으며, 알몸이 아니어야 하므로 꼭 1종류 이상의 의상은 착용해야 한다.
예를 들어, 3종류의 의상이 있으면 1종류만 착용해도 되고, 2종류를 착용해도 되고, 3종류를 착용해도 되지만
0종류를 착용하는건 안된다.
그렇다면 다음과 같은 식을 세울 수 있다.
(a종류의 의상 수 + 1) x (b종류의 의상 수 + 1) x (c종류의 의상 수 + 1) ...... - 1
여기서 각 종류수에 +1을 해준 이유는 그 종류의 의상을 착용하지 않아도 되는 경우를 추가했기 때문이고
마지막에 -1을 해준 이유는 모든 의상을 착용하지 않은 경우는 제외해야 하기 때문이다.
의상의 종류는 같은데 이름이 다른 의상이 여러개일 수 있으므로
[의상의 종류]를 키, [의상의 이름들을 담은 리스트]를 값으로 가진 딕셔너리를 통해 문제를 푼다.
T = int(input())
for _ in range(T):
clothes_dict = {}
n = int(input())
for _ in range(n):
clothes_name, clothes_type = input().split() # 옷의 이름, 옷의 종류
if (clothes_type not in clothes_dict): # 딕셔너리에 없던 옷 종류면
clothes_dict[clothes_type] = [clothes_name] # 옷의 이름을 담은 리스트를 키(옷 종류)에 추가한다.
else: # 딕셔너리에 이미 존재하는 옷 종류면 값 리스트에 추가한다.
new_clothes = clothes_dict.get(clothes_type)
new_clothes.append(clothes_name)
clothes_dict[clothes_type] = new_clothes
count = 1
for key in clothes_dict:
count *= len(clothes_dict[key]) + 1
print(count - 1)
https://www.acmicpc.net/problem/9375
'알고리즘과 코딩 테스트 > 백준 25단계' 카테고리의 다른 글
[파이썬] 15650번. N과 M (2) 풀이 (0) | 2023.03.03 |
---|---|
[파이썬] 2004번. 조합 0의 개수 풀이 (0) | 2023.02.24 |
[파이썬] 2981번. 검문 풀이 (1) | 2023.02.21 |
[파이썬] 1002번. 터렛 풀이 (0) | 2023.02.20 |
[파이썬] 2477번. 참외밭 풀이 (0) | 2023.02.13 |