본문 바로가기

코딩테스트

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

728x90

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

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

 

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

 

  • sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러왔다. -> import sys
  • 도감에 등록된 포켓몬의 개수와 맞춰야 하는 문제의 개수를 입력받는다. -> N, M = map(int, sys.stdin.readline().split())
  • 번호를 key로 저장하는 딕셔너리 생성  -> d1 = {}
  • 포켓몬 이름을 key로 저장하는 딕셔너리 생성  -> d2 = {}
  • 도감에 수록된 포켓몬 수만큼 반복 진행  -> for i in range(N):
  • 포켓몬의 이름을 받음  -> name = sys.stdin.readline().rstrip()
  • 해당 번호를 key로 하는 딕셔너리에 이름 저장  -> d1[i + 1] = name
  • 해당 포켓몬 이름을 key로 하는 딕셔너리에 번호를 각각 저장  -> d2[name] = i + 1
  • 맞춰야 하는 문제의 개수만큼 반복해줌  -> for _ in range(M):
  • 문제 입력받음  ->  dd = sys.stdin.readline().rstrip()
  • 만약 문제가 숫자로 들어오면  -> if (dd.isdecimal()):
  • 해당 번호가 key로 저장되어 있는 딕셔너리에서 해당 포켓몬 이름 출력  -> print(d1[int(dd)])
  • 만약 문제가 있는 포켓몬 이름 들어올시(숫자로 안들어옴)  -> else:
  • 이름이 key로 저장된 딕셔너리 내에서 해당 포켓몬의 번호를 출력  -> print(d2.get(dd))

 

 

최종 코드

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):
    dd = sys.stdin.readline().rstrip()
    if (dd.isdecimal()):
        print(d1[int(dd)])
    else:
        print(d2.get(dd))
728x90

'코딩테스트' 카테고리의 다른 글

코테 DFS  (0) 2025.02.10
코테 BFS  (0) 2025.02.10
백준 2869 : 달팽이는 올라가고 싶다.  (1) 2024.09.26
백준 1193 : 분수찾기  (0) 2024.09.26
백준 1062번 가르침  (0) 2024.09.24