[백준 / Python] 1620번 : 나는야 포켓몬 마스터 이다솜

개발자가 되고 싶어요 ㅣ 2023. 1. 29. 01:30

https://www.acmicpc.net/problem/1620

 

1620번: 나는야 포켓몬 마스터 이다솜

첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면

www.acmicpc.net

 

 

첫번째 시도

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import sys
input = sys.stdin.readline
 
n,m = map(int,input().split())
 
monster_list=['z'* n
 
for i in range(n):
    monster_list[i] = input()
 
for j in range(m):
    a = input()
    try:
        a = int(a)
        print(monster_list[a-1].rstrip())
    except:
        print(monster_list.index(a)+1)
cs

 

 

결과는 시간초과.

두번째 반복문에서 시간복잡도가 꽤나 커진것이 아닌가 추측된다.

차라리 리스트를 쓰지 말고 딕셔너리를 쓴다면 시간복잡도가 훨 줄어들고 간단해질것 같아서 처음부터 다시 짜봤다.

 

두번째 시도

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sys
input = sys.stdin.readline
 
n,m = map(int,input().split())
 
monster_dic = {}
 
for i in range(n):
    monster = input().rstrip()
    monster_dic[i+1= monster
    monster_dic[monster] = i+1
    
for j in range(m):
    item = input().rstrip()
    if item.isdigit():
        print(monster_dic[int(item)])
    else:
        print(monster_dic[item])
cs

 

 

딕셔너리 자료형에서 key값으로 value값을 가져오는건 간단하지만 반대의 경우는 조금 귀찮을거 같았다...

그래서 인덱스를 key값으로 쓰고 입력값을 value값으로 하는 item을 추가시킴과 동시에 그 반대의 경우로 입력값을 key값으로 인덱스를 value값으로 하는 item도 추가 시켰다.