1620번 나는야 포켓몬 마스터 이다솜
N줄의 포켓몬이 도감에 등록되고 M개의 문제가 제출 된다.
도감 등록 후 문제는 포켓몬 번호 혹은 포켓몬의 이름이 주어지고
번호가 주어지면 포켓몬의 이름을, 포켓몬의 이름이 주어지면 번호를 출력하는 문제. (포켓몬 번호는 등록순)
import sys
input = sys.stdin.readline
n,m = map(int,input().split())
mon = {}
mon2 = {}
for i in range(1,n+1): # 해당 문제는 입력 문자끝에 개행문자가 붙어있다.
p = input().rstrip('\n') # 개행 문자를 제외하고 입력해줬다.
mon[str(i)] = p # 입력을 문자로 받기 위해 str로 변환했다.
mon2[p] = i # 입력이 포켓몬 번호 혹은 포켓몬 이름이라서
# 포켓몬 번호 = 포켓몬 이름/ 포켓몬 이름 = 포켓몬 번호 두개의 딕셔너리를 만들어 줬다.
for i in range(m):
s = input().rstrip('\n') # 마찬가지로 개행제외
print(mon.get(s,mon2.get(s))) # 입력 값이 포켓몬 번호이면 mon에서 get
# 입력 값이 mon 딕셔너리 key 들 중에 없다면 mon2 딕셔너리에서 get
처음에 리스트와 인덱스를 사용했지만 시간초과가 났고
계산 시간을 줄이기 위해 딕셔너리를 사용했다.
딕셔너리 .get(k,v) 의 시간 복잡도는 O(1)이고 찾는 k 값이 없을 경우 v를 반환하는 특징을 활용해서 풀이해 봤다.