최대 1 분 소요

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 얻기