import sys
input = sys.stdin.readline
for _ in range(int(input())):
clothes = {}
# 옷 분류
for _ in range(int(input())):
cloth, type = input().rstrip().split()
if type in clothes:
clothes[type] += 1
else:
clothes[type] = 1
# 분류 대로 코디하기
# +1 해서 숫자를 모두 곱하고 -1(알몸)
result = 1
for _, v in clothes.items():
result *= (v + 1) # 이 분류를 코디에 포함하지 않는 경우의 수
print(result - 1)
고등학교 때 배운 확률 과목이 계속 생각났다ㅋㅋㅋ
옷을 분류하고, 코디의 경우의 수를 구하면 되는 쉬운 문제다.
경우의 수는 구하는 법은 다음과 같다.
각 분류의 옷의 개수에 + 1을 먼저 해야 한다. 여기서 1은 이 분류를 코디에 포함하지 않는 경우의 수다.
3
hat headgear
sunglasses eyewear
turban headgear
첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지
라고 설명이 나와있다. 이를 수학적으로 다시 쓰면,
(none, hat), (none, turban), (sunglasses, none), (hat,sunglasses), (turban,sunglasses) 이렇게 5가지가 된다.
즉, none이라는 경우의 수를 위해 1을 더한 것이다.
이렇게되면 (none, none) 이라는 알몸(!)인 경우의 수가 나오므로 마지막에 -1, 1을 뺀 것이다!
'Algorithm > BaekJoon' 카테고리의 다른 글
[백준/Python] 13549번-숨바꼭질 3 (0) | 2023.09.10 |
---|---|
[백준/Python] 3184번 - 양 (0) | 2023.09.09 |
[백준/Python] 2146번 - 다리 만들기 (0) | 2023.09.06 |
[백준/Python] 2573번 - 빙산 (0) | 2023.09.06 |
[백준/Python] 2170 - 선 긋기 (0) | 2023.09.02 |