본문 바로가기
알고리즘/백준

백준 실버3 9375. 패션왕 신해빈 (python)

by 개발하는 호랑이 2024. 3. 3.

패션왕 신해빈

풀이

어떻게 할까 하다가 딕셔너리를 이용하기로 했다.

딕셔너리에 각 옷의 종류별로 key와 value를 받고 value는 리스트로 옷들을 입력했다.
따라서

{'headgear': ['hat', 'turban'], 'eyewear': ['sunglasses']}
{'face': ['mask', 'sunglasses', 'makeup']}

와 같은 형태로 입력된다.
이를 이용해서 풀이를 했다.

  1. 테스트케이스와 입력받아야 하는 n을 입력받고 이를 이용해서 반복문 실행
  2. 딕셔너리 생성 후 옷과 옷의 종류를 딕셔너리에 리스트 값으로 입력
  3. 조합수를 확인하기 위해 딕셔너리의 key를 순회시켜서 각 key의 값의 길이에 안 입는 경우도 포함해서 len(dict [di])+1을 answer에 곱해주기
  4. 출력 시에는 모두 안 입는 경우를 제외해야 하기에 마지막 answer -1을 출력

이렇게 해서 아래 코드가 나왔다.

import sys

T = int(sys.stdin.readline().strip())
for testcase in range(1, T+1):
    n = int(sys.stdin.readline().strip())
    # 딕셔너리에 의상 종류별 의상을 입력
    dict = {}
    for _ in range(n):
        a, b = map(str, sys.stdin.readline().split())
        # 딕셔너리에 있으면 리스트에 추가
        if dict.get(b):
            dict[b].append(a)
        # 딕셔너리에 없으면 생성
        else:
            dict[b] = [a]
    # 조합을 위해 곱하기를 사용예정
    answer = 1
    # 딕셔너리의 각 key을 이용해서 value의 길이를 이용해서 answer에 곱해주기
    for di in dict:
        # +1을 해주는 이유는 안입는 경우도 포함하니까.
        answer *= (len(dict[di])+1)
    # answer -1인 이유는 모두 안입는 경우는 제외해야하니까.
    print(answer - 1)