코드

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을 빼주면 정답이다.

댓글남기기