알고리즘
백준 1620 - 나는야 포켓몬 마스터 이다솜 (Python)
jamie2779
2023. 8. 2. 08:57
문제
https://www.acmicpc.net/problem/1620
1620번: 나는야 포켓몬 마스터 이다솜
첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면
www.acmicpc.net
풀이
#시간초과 오답
import sys
input = sys.stdin.readline
n,m = map(int,input().split())
d = [input().strip() for _ in range(n)]
for i in [input().strip() for _ in range(m)]:
if i.isdigit():
print(d[int(i)-1])
else:
print(d.index(i)+1)
처음 작성한 코드는 포켓몬 N개를 입력받아 리스트에 저장하고, 이후 입력받은 M개의 문제에 대하여, 숫자면 해당 위치의 값을 출력하고, 영어면 index를 이용하여 출력해주었는데, index가 O(N)의 시간이 걸려서 시간초과가 나오게 되었다. 따라서 딕셔너리를 사용하는 아래의 코드로 바꾸어 주었다.
#정답코드
import sys
input = sys.stdin.readline
n,m = map(int,input().split())
d1={}
d2={}
for i in range(1,n+1):
name = input().strip()
d1[str(i)] = name
d2[name] = i
for i in range(m):
t = input().strip()
if t.isdigit():
print(d1[t])
else:
print(d2[t])
딕셔너리 두개를 선언해서 하나는 포켓몬 번호를 key로, 하나는 포켓몬 이름을 key로 하여 저장한 후 문제가 숫자인지 영어인지에 따라 해당하는 딕셔너리에서 값을 꺼내서 출력해주는 방식이다.