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

김범기·2024년 3월 3일
0

백준

목록 보기
14/18

패션왕 신해빈

풀이

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

딕셔너리에 각 옷의 종류별로 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)
profile
반드시 결승점을 통과하는 개발자

0개의 댓글