과정
- 도감 번호로 들어오면 포켓몬 이름을, 포켓몬 이름이 들어오면 도감 번호를 출력해야 한다.
- 도감 번호가 인덱스인 리스트를 만들고, 포켓몬 이름의 첫 글자가 key 인 딕셔너리를 만들었다.
- python 시간 초과, pypy 시간 초과는 아니지만 메모리와 시간이 많이 들음
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
lst = []
dic = {}
for _ in range(N):
lst.append(input().rstrip())
for i in range(65, 91):
dic[i] = []
for i in range(97, 123):
dic[i] = []
for i in range(N):
dic[ord(lst[i][0])].append(i)
for _ in range(M):
inp = input().rstrip()
try:
inp = int(inp)
print(lst[inp-1])
except:
for i in dic[ord(inp[0])]:
if lst[i] == inp:
print(i+1)
- 도감 번호가 key인 딕셔너리와 포켓몬 이름이 key인 딕셔너리 두 개를 만듦
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
dic_num = {}
dic_name = {}
for i in range(N):
inp = input().rstrip()
dic_num[i] = inp
dic_name[inp] = i
for _ in range(M):
inp = input().rstrip()
if inp.isdigit():
print(dic_num[int(inp) - 1])
else:
print(dic_name[inp] + 1)
- 리스트를 사용하는 것보다 딕셔너리를 사용하는 것이 시간과 메모리를 적게 쓴다는 것을 알았다.
- 이에 관해 찾아보니 데이터 양이 적으면 별 차이가 없지만, 데이터가 많아지면 리스트는 연산이 많아지고, 딕셔너리는 일정하다고 한다.
- 리스트는 처음부터 탐색하느라 연산이 많아지므로