본문 바로가기

알고리즘/백준

[Python] 백준 파이썬 1620 나는야 포켓몬 마스터 이다솜

https://www.acmicpc.net/problem/1620

 

1620번: 나는야 포켓몬 마스터 이다솜

첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면

www.acmicpc.net

  • 풀이 1
# 백준 1620 나는야 포켓몬 마스터 이다솜
# n : 포켓몬의 개수
# m : 맞춰야 하는 문제의 개수
import sys
input = sys.stdin.readline
n, m = map(int, input().split())

pname2index = {}  # 1
for i in range(n):
  name = input().strip()
  pname2index[name] = str(i+1)

index2pname = {index : name for name, index in pname2index.items()} # 2

for _ in range(m):
  q = input().strip()
  if q in pname2index: # 3
    print(pname2index[q])
  else:
    print(index2pname[q])

문제는

  1. 포켓몬에 번호를 붙여라
  2. 이름을 물어보면 번호를 말하고 번호를 물어보면 이름을 말해라

입니다.

# 1 : 그래서 저는 pname2index 라는 딕셔너리를 만들어서 {포켓몬 이름 : 번호} 형식으로 저장하였습니다. 이름을 번호(인덱스)로 바꿔주는 딕셔너리 입니다.

# 2 : 그리고 번호를 받아서 이름으로 바꿔주는 딕셔너리 index2pname도 만들었습니다. 그냥 pname2index를 key, value 자리만 바꿔주면 됩니다.

# 3 : 질문이 들어오면 질문이 번호인지 이름인지를 파악해줍니다. 딕셔너리에 in을 사용하면 key값 기준으로 판단 해줍니다. 해보니까 그렇더라구요.. ㅎㅎ 여튼 질문이 pname2index의 key에 있으면(이름이면) pname2index를 이용해 이름을 번호로, 아니면 index2pname을 이용해 번호를 이름으로 바꿔서 출력해줍니다.