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

728x90
반응형

단계별로 풀어보기 - [집합과 맵] - 1620번 나는야 포켓몬 마스터 이다솜

문제


문제가 포켓몬 컨셉이라 스토리가 꽤 긴데, 입력과 출력만 보면 된다.

문제링크

 

 

풀이


도감에 N개의 포켓몬이 순서대로 저장되어 있고,

M개의 검사할 포켓몬들이 들어오는데, 문자열로 들어오면 번호를, 번호로 들어오면 문자열로 출력하면 된다.

 

✅ dictionary 사용

N개의 포켓몬들을 도감이라는 딕셔너리에 저장한다. key로 value를 바로 찾을 수 있게!

key는 포켓몬 이름으로, value는 포켓몬 번호로 저장하였다.

 

✅ value-key 값으로 뒤집어서 저장하기: reverse dictionary 

키값으로 찾는 것은 간단하지만, value값으로 key값을 찾고 싶다면, map함수를 이용하여 뒤집을 수 있다.

for문을 활용할 수도 있는데, 시간 초과가 날까 봐 사용하지 않았다.

 

✅ 줄바꿈 제거 함수 strip()

입력값을 저장할 때, input()으로 입력을 받으면 '\n'이 함께 저장되어서 줄바꿈문자열을 제거하기 위해 strip() 함수를 썼다.

줄바꿈 문자열을 제거하지 않으면 입력으로 들어온 값이 숫자인지 알파벳인지 구분할 때 '\n'이 껴있어서 검사가 불가능하다.

 

✅ 숫자인지 확인하는 함수 isdigit()

입력으로 받은 문자열이 숫자인지 확인하려면 문자열.isdigit() 을 쓰면 된다.

숫자일 경우 True, 숫자가 아닐 경우 False를 반환한다.

만약 숫자일 경우, int()함수를 사용하여 정수로 바꾼 후 reverse dict에서 해당하는 포켓몬의 이름을 찾으면 된다.

 

 

 

CODE

# 나는야 포켓몬 마스터 이다솜
import sys
input = sys.stdin.readline

n, m = map(int, input().split())

dogam = dict()
for i in range(n):
    s = input().strip()
    dogam[s] = i+1
revers_dogam = dict(map(reversed, dogam.items()))

pocketmon = list()
for _ in range(m):
    pocketmon.append(input().strip())

for p in pocketmon:
    if p.isdigit():
        print(revers_dogam[int(p)])
    else:
        print(dogam[p])

 

결과


728x90
반응형