BaekJoon 9375번: 패션왕 신해빈 (Python)

SSW·2022년 7월 22일
0

BOJ

목록 보기
11/12

1. Problem


2. Solution

colletions module의 Counter class 활용

import sys
from collections import Counter

T = int(sys.stdin.readline())
for _ in range(T):
    cloth = []
    n = int(sys.stdin.readline())
    for _ in range(n):
        a, b = map(str, sys.stdin.readline().split())
        cloth.append(b)
    result = Counter(cloth)
    count = 1
    for e in result:
        count *= result[e] + 1
    print(count - 1)

3. Detail

이 문제는 경우의 수로 풀어야한다. 만약 총 의상 수는 5개인데 의상 종류의 수가 2개로 {'1': 2개, '2': 3개}와 같이 주어져 있다고 하자. 이 때, 특정 종류에 대한 의상을 착용하지 않을 수 있기 때문에 (종류 1의 갯수 + 1) * (종류 2의 갯수 + 1)와 같이 각각의 수에 1을 더해서 곱해야한다. 하지만 아무 의상도 입지 않은 경우는 제외시켜야 하므로 -1을 해줘야한다.

for _ in range(n):
	a, b = map(str, sys.stdin.readline().split())
    cloth.append(b)

차례대로 의상의 종류를 입력 받아서 cloth list에 추가한다.

result = Counter(cloth)

이후에 colletion module의 Counter class를 활용하여 의상의 종류가 겹치지 않게 각 의상의 종류마다 속해있는 의상의 갯수를 구한다. Counter class를 사용하면 예를 들어 {'1': 2개, '2': 3개}와 같이 구해지는 것이다. 이렇게 중복을 없애고 같은 종류끼리는 같은 종류인 의상의 갯수를 구하여 결과값이 나오면

for e in result:
        count *= result[e] + 1
    print(count - 1)

result list에 포함되어있는 값들을 모두 1씩 더해서 서로 곱해준다. 이 때, 위에서 언급했었던 조건 중 아무 의상도 입지 않은 경우 1회를 제외시키기 위해 1을 빼준 후 출력한다.


4. collections.Counter()

SSW.log [collections.Counter() 설명]

위의 링크를 들어가면 설명과 예시가 있으므로 참고하면 된다.

profile
ssw

0개의 댓글