본문 바로가기

etc.

[백준 9375번][Python] 딕셔너리 자료형 이용

반응형

www.acmicpc.net/problem/9375

 

9375번: 패션왕 신해빈

첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로   (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다.

www.acmicpc.net

9375번 패션왕 신해빈 문제의 해답은,

각 의상의 개수가 a, b, c, ... 일 때 답이 {(a+1) * (b+1) * (c+1) * ... } - 1 이라는 것에 있다

하지만 이 글에서는 딕셔너리를 이용하는 것에 초점을 두어보자

 


 

코드는 다음과 같다

 

# input Test Case
for _ in range(int(input())):
    wearable = dict()

    # input n
    for _ in range(int(input())):
        wear_name, wear_type = map(str, input().split())

        # 같은 옷 분류 중, 이름은 버리고 종류만 가져가기
        if wear_type in wearable.keys():
            wearable[wear_type] += 1
        else:
            wearable[wear_type] = 1

        # (각 옷의 수)+1 한 것을 곱해줌
        answer = 1
        for key in wearable.keys():
            answer *= wearable[key] + 1
    # 안입는 경우만 뺴줌
    print(answer - 1)

 

우리가 생각해야 하는 조건들은 다음 세 가지이다

 

1. 의상과 의상의 종류를 묶어 저장하면 편할 것이고,

2. 같은 종류의 의상이 있는지 판별하며 추가해야한다 (같은 이름의 옷은 없다)

3. 마지막에는 의상 종류마다의 의상 개수를 확인한다

 

위 조건으로 우리는 [조건 1] 딕셔너리를 떠올리고,

[조건 2/3] 의상의 종류(key)와 의상의 개수(value)를 다루면 된다고 생각할 수 있다

 


 

우선 Line 1 ~ 7 에서는 Test Case, n, 의상과 의상 종류들을 입력받는다

(snupi.tistory.com/79)

 

[Python] 입력 받기 (input(), sys.stdin.readline())

1. input() 가장 기본적인 입력 방식으로, 문자열을 입력받게 된다 숫자로 입력을 받고싶다면 다음과 같이 int형 변환을 해주어야 한다 str = input() num = int(input()) input() 함수는 기본적으로 한 줄 단위

snupi.tistory.com

그 사이에 Line 3 에서 wearable이라는 딕셔너리 자료형을 선언한 것을 볼 수 있다

 

Line 9 ~ 13 에서 의상의 종류를 비교하고, 개수를 +1 해준다

 

Line 15 ~ 에서 의상의 개수로 답을 도출하는 것을 알 수 있다

 


 

이와 같이 종류나 표같은 대응관계가 있으면 딕셔너리를 이용할 수 있다

C에서는 구조체를 이용하여 다음과 같이 구현할 것이다

struct clothes {
	char name[21];
	int num;
};

typedef struct clothes {
	char name[21];
	int num;
}clothes;
반응형