1 분 소요

사용 언어: Python3

문제

백준 16165

스크린샷 2023-03-27 오후 11 01 31 스크린샷 2023-03-27 오후 11 01 45

코드

내 풀이

# 입력 받을 걸그룹의 수 N
# 맞혀야 할 문제의 수 M
N, M = map(int, input().split())
# 걸그룹마다 팀의 이름, 걸그룹의 인원 수, 멤버의 이름을 한 줄씩 차례대로 입력

# init groupDict
groupDict = dict()

for _ in range(N):
  groupName, memberCnt = input(), int(input())
  
  members = list()
  for _ in range(memberCnt):
    members.append(input())
    
  groupDict[groupName] = members

# init questionDict
questionDict = dict()
for _ in range(M):
  name, flag = input(), int(input())
  questionDict[name] = flag

# output
for x in questionDict:
  # 팀에 속한 멤버 이름 출력
  if questionDict[x] == 0: # key로 value 찾기
    for member in sorted(groupDict[x]): # 사전순!!
      print(member)
  else: # 멤버가 속한 팀 이름 출력
    team = [k for k, v in groupDict.items() if x in v] # ✅ value로 key 찾기
    print(team[0])
  • 처음에 사전순으로 출력을 하지 않아 틀렸다.. 문제를 꼼꼼히 읽자!!
  • value로 key를 찾는 방법이 있긴 하지만 매번 매번 딕셔너리 전체를 순회하면서 가져오기 때문에 비효율적이다.
    • 다른 방법으로는 딕셔너리의 {key, value}를 뒤집어 {value: key} 저장해놓고 찾는 방법이 있다.
      aa = {'0': 'AA', '1': 'BB', '2': 'CC'}
      bb = {v:k for k,v in aa.items()} # {'AA': '0', 'BB': '1', 'CC': '2'}
      bb.get('CC') # 결과: '2'
      

다른 풀이

# 입력 받을 걸그룹의 수 N
# 맞혀야 할 문제의 수 M
N, M = map(int, input().split())

team_mem, mem_team = {}, {} # ✅ 딕셔너리 선언 
# 팀과 멤버를 따로따로 처리할 수 있다! (네이밍은 key_value 형태)

# team_mem (team이 key) 
# -> {'twice': ['jihyo', 'dahyeon', 'mina']}

# mem_team (mem이 key) 
# -> {'jihyo':'twice'} # ✅ 각 멤버별 team을 value로 가지는 딕셔너리도 선언!

for i in range(N):
  groupName, memberCnt = input(), int(input())
  team_mem[groupName] = [] # ✅ value에 빈 리스트 정의 (딕셔너리와 리스트 연결)
  for j in range(memberCnt):
    name = input()
    team_mem[groupName].append(name)
    mem_team[name] = groupName # ✅ 딕셔너리 업데이트

# 퀴즈 input & output
for i in range(M):
  name, flag = input(), int(input())
  if flag == 1: # 멤버가 속한 팀 이름 출력
    print(mem_team[name])
  else: # 팀에 속한 멤버 이름 출력
    for mem in sorted(team_mem[name]): # ✅ 사전순!!
      print(mem)
  • 멤버가 속한 팀의 이름을 출력할 때
    • 나는 value로 key를 구할 생각을 했었는데, 애초에 member를 key로 가지고 팀을 value로 가지는 딕셔너리를 하나 더 선언하는 방법이 있었다..!


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기