문제: https://www.acmicpc.net/problem/1620
Python의 dict 자료형을 2번 이용해 문제를 풀었다.
처음에는 dict형 변수를 한개만 선언해 포켓몬 이름으로 들어왔을때 반복문을 통해 해당 value값과 동일한 숫자 키를 출력하도록 했는데, 문제 조건을 다시 확인해보니 N, M 모두 100,000보다 작거나 같은 자연수였다. 이러면 최대 N^2가 됐을 때... 시간초과가 발생할 수 있다.
그래서 숫자와 포켓몬 이름이 들어왔을 때 사용할 dict형 변수를 2개 선언해 해결했다.
오답 코드
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
ill_book = {}
for n in range(N):
ill_book[n+1] = input().strip()
for m in range(M):
question = input().strip()
try:
question = int(question)
print(ill_book[question])
except(ValueError):
for i in range(1, N + 1):
if ill_book[i] == question:
print(i)
정답 코드
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
ill_book_num = {}
ill_book_name = {}
for n in range(N):
poketmon = input().strip()
ill_book_num[n+1] = poketmon
ill_book_name[poketmon] = n+1
for m in range(M):
question = input().strip()
try:
question = int(question)
print(ill_book_num[question])
except(ValueError):
print(ill_book_name[question])