백준 9375 - 패션왕 신해빈 (Python3)
코드
from collections import Counter
T = int(input())
for _ in range(T):
n = int(input())
# clothes = [input().split() for i in range(n)]
# 의상의 종류를 담을 리스트
clothes_kind = []
for _ in range(n):
# 옷의 이름은 중복이 없고 의상의 종류만 경우의 수에 영향을 준다
# 따라서 name 변수는 사실상 문제 풀이에 필요하지 않다
name, kind = input().split()
clothes_kind.append(kind)
# clothes 변수
_Counter = Counter(clothes_kind)
# 1로 시작해야 누적곱의 값을 구할 수 있음
cnt = 1
for i in _Counter:
# 해당 종류를 입지 않는 경우도 존재하므로
# 그 경우까지 함께 생각해서 연산해야함
# 따라서 +1
cnt *= _Counter[i] + 1
# 벌거 벗은 상태는 빼줘야함
print(cnt - 1)
문제 해설
단순한 경우의 수 문제이다. 처음에 문제를 너무 어렵게 접근하여 잘 풀리지 않아 난감했는데 노트에 적어서 패턴을 찾은 후 공식으로 만드니까 쉽게 풀렸다.
의상의 종류 i, j, k와 종류 별 의상의 개수가 n, m, o로 주어질 때의 경우의 수를 생각해보면
- 모든 경우의 수 = (n * m * o)
로 생각할 수 있다. 이 때, 꼭 모든 종류의 의상을 입어야하는 것은 아니므로 의상의 개수에 벌거 벗은 경우까지 추가하여 경우의 수를 구해줘야한다.
- 벌거 벗은 경우까지의 모든 경우의 수 = [(n+1) * (m+1) * (o+1)]
그리고 문제의 조건에 의해서 알몸이 되어서는 안 되기 때문에 다 벗은 경우의 수인 1을 빼주면 정답이다.
댓글남기기