리스트를 사용했더니 시간 초과가 떴다.
리스트는 탐색할 때 시간복잡도가 O(n)이라 index에 따라 탐색할 때 데이터 양에 따라 적합하지 않을 수도 있다.
따라서 자료구조 개선이 필요하다. 파이썬 dictionary는 hash table을 사용해 시간복잡도가 O(1)이다.
이 문제는 sys.stdin.readline()과 딕셔너리를 사용해야 한다.
포켓몬 개수 n과 질문 m개를 입력받는다.
포켓몬이 들어갈 mon 딕셔너리를 선언한다.
반복문 (1부터 n까지)
포켓몬 이름을 입력받는다. 이때 rstrip() 함수를 사용해서 뒤에 적히는 공백을 없앤다.
딕셔너리에 key: value로 번호: 이름, 이름: 번호로 한번씩 저장해준다.
반복문 (0부터 m까지)
질문을 입력받는다
만약 질문(q)가 숫자라면, q 숫자에 해당하는 포켓몬 이름을 출력한다.
문자라면, 이름에 해당하는 포켓몬 번호를 출력한다.
import sys
n, m = map(int, sys.stdin.readline().split())
mon = {}
for i in range(1, n+1):
a = sys.stdin.readline().rstrip()
mon[i] = a
mon[a] = i
for i in range(m):
q = sys.stdin.readline().rstrip()
if q.isdigit() == True:
print(mon[int(q)])
else:
print(mon[q])
문제가 굉장히 길었다. 핵심만 뽑아서 시간초과가 나지 않도록 자료구조를 짜는게 중요했다.
딕셔너리는 시간복잡도가 O(1)이고, 리스트는 O(n)이다.
strip() 함수
lstrip() : 인자가 없으면 왼쪽 공백 제거
rstrip() : 인자가 없으면 오른쪽 공백 제거
strip() : 인자가 없으면 왼쪽, 오른쪽(양쪽) 공백 제거