[백준 1620] 나는야 포켓몬 마스터 이다솜
1620번 : 나는야 포켓몬 마스터 이다솜
방법 1 (틀림)
- 시간 초과
- dogam.index 에서 시간이 많이 소요됨 (O(N)) (포켓몬 이름 입력 -> 포켓몬 번호 출력)
- 알게된 점
- int(“어쩌구”) 명백한 str을 int형으로 바꾸면 에러 발생
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
dogam = [] # 포켓몬 도감
for i in range(1, n+1):
dogam.append(input().rstrip())
for i in range(m):
question = input().rstrip()
# 숫자를 입력한 경우
try:
print(dogam[int(question)-1])
# 포켓몬 이름을 입력한 경우
except:
print(dogam.index(question)+1)
방법 2 (옳은 풀이)
- 도감을 dictionary 로 저장 (dictionary의 get은 O(1) 소요)
- key: 번호, value: 이름 / key: 이름, value: 번호 로 2개의 dictionary 저장
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
num_name_dogam = {} # 포켓몬 도감 (번호: 이름)
for i in range(1, n+1):
num_name_dogam[i] = input().rstrip()
name_num_dogam = {v:k for k, v in num_name_dogam.items()} # 포켓몬 도감 (이름: 번호)
for i in range(m):
question = input().rstrip()
# 숫자를 입력한 경우
try:
print(num_name_dogam.get(int(question))) # key 로 value 얻기
# 포켓몬 이름을 입력한 경우
except:
print(name_num_dogam.get(question)) # value로 key 얻기