본문 바로가기
백준

[백준] 1620번 : 나는야 포켓몬 마스터 이다솜 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 11. 21.
728x90
반응형

 

 

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

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

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

해당 문제는 포켓몬 도감을 저장하여 해당 문제가 나오면 도감에 있는 정보를 정확하게 맞추는 문제이다.

문제는 포켓몬의 이름과 번호, 두 가지 방식으로 나올 수 있으므로 딕셔너리 두 개를 사용해 각각 이름과 번호를 key로 하여 정보를 저장한다.

저장한 정보를 바탕으로 문제가 번호로 나왔을 경우와, 이름으로 나왔을 경우 각각 판단하여 해당 정보를 딕셔너리에서 찾아 출력한다.

 

  1. sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
  2. 도감에 수록되어 있는 포켓몬의 개수와 맞춰야 하는 문제의 개수를 입력받는다. N, M = map(int, sys.stdin.readline().split())
  3. 번호를 key로 저장하는 딕셔너리를 생성하고 d1 = {}
  4. 포켓몬의 이름을 key로 저장하는 딕셔너리를 생성한다. d2 = {}
  5. 도감에 수록되어 있는 포켓몬의 수만큼 반복하며 for i in range(N)
  6. 포켓몬의 이름을 입력받아 name = sys.stdin.readline().rstrip()
  7. 해당 번호를 key로 하는 딕셔너리에 이름을 저장하고 d1[i + 1] = name   
  8. 해당 포켓몬의 이름을 key로 하는 딕셔너리에 번호를 각각 저장한다. d2[name] = i + 1
  9. 맞춰야 하는 문제의 개수만큼 반복하며 for _ in range(M)
  10. 문제를 입력받고 data = sys.stdin.readline().rstrip()
  11. 만약 문제가 숫자로 들어오면 if (data.isdecimal())
  12. 번호가 key로 저장되어 있는 딕셔너리에서 해당 포켓몬의 이름을 출력한다. print(d1[int(data)])
  13. 반면에 문제가 포켓몬의 이름으로 들어오면 else
  14. 이름이 key로 저장되어 있는 딕셔너리에서 해당 포켓몬의 번호를 출력한다. print(d2.get(data))
반응형

3. 소스코드

import sys

N, M = map(int, sys.stdin.readline().split())

d1 = {}
d2 = {}
for i in range(N):
    name = sys.stdin.readline().rstrip()
    d1[i + 1] = name    
    d2[name] = i + 1

for _ in range(M):
    data = sys.stdin.readline().rstrip()
    if (data.isdecimal()):
        print(d1[int(data)])
    else:
        print(d2.get(data))
728x90
반응형