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
반응형