백준 16165번
https://www.acmicpc.net/problem/16165
문제
후기
default dict 라는 dictionary의 서브 클래스에 대해 몰라서 꽤 오랜시간 고민했다.
걸그룹을 키 값으로 받으면, 그 내부에 이중으로 dictionary를 사용해서 걸그룹의
멤버를 받아야 하는데, list를 선언하는 부분에서 미리 선언돼 있지 않아 자꾸 에러가 발생했다.
이 부분을 default dict로 해결할 수 있었다.
default dict는 인자로 주어진 객체의 기본 값을
딕셔너리의 초기값으로 지정할 수 있었다.
이 문제에서 필요한건 dictionary 안에 들어갈 list이므로 list로 선언했다.
이 다음부터는 1이 입력되면 그룹 이름을 딕셔너리에서 찾아서 호출하고,
0이 입력되면 key값을 정렬해서 for문으로 출력한다.
나의 풀이
import sys
input= sys.stdin.readline
from collections import defaultdict
N , M = map(int,input().split()) #걸그룹수, 문제수
li = defaultdict(list) #default 값이 list인 딕셔너리
for _ in range(N):
group = input().rstrip()
num = int(input())
for i in range(num):
name = input().rstrip()
li[group].append(name) #twice라는 그룹이 있다면, 그 그룹원의 이름을 append한다.
li= dict(li) #다시 dictionary로 바꿔준다.
for _ in range(M):
quiz_name = input().rstrip() #퀴즈 ( 걸그룹, 걸그룹멤버 둘중하나 )
quiz_num = int(input())
if quiz_num == 1: #1일 때는
for key, values in li.items():
if quiz_name in values: #해당 걸그룹 멤버를 value값으로 가지는 key를 출력한다.
print(key)
break
elif quiz_num == 0:
for key, values in li.items(): #해당 걸그룹 멤버들을 정렬해서 출력한다.
if quiz_name in key:
values.sort()
for j in values:
print(j)
break