코딩테스트

[백준/ 파이썬] 1670 나는야 포켓몬 마스터 이다솜

Sun0727 2022. 6. 7. 14:45

#문제링크

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

 

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

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

www.acmicpc.net

#나의풀이

첫번째 풀이 시간초과 코드

import sys

if __name__ == '__main__':
    N, M = map(int, sys.stdin.readline().split())
    poket = []

    for _ in range(N):
        poket.append(sys.stdin.readline().rstrip())

    for _ in range(M):
        tmp = input().rstrip()
        if tmp.isdigit():
            print(poket[int(tmp) - 1])
        else:
            idx = poket.index(tmp)
            print(idx + 1)

두번째 풀이 통과 코드

import sys

if __name__ == '__main__':
    N, M = map(int, sys.stdin.readline().split())
    poket = dict()

    for i in range(1, N+1):
        tmp = sys.stdin.readline().rstrip()
        poket[i] = tmp
        poket[tmp] = i

    for _ in range(M):
        tmp = sys.stdin.readline().rstrip()
        if tmp.isdigit():
            print(poket[int(tmp)])
        else:
            print(poket[tmp])

#해설

단순히 값 받아서 숫자면 인덱스로 값 출력 문자면 값 찾아 인덱스 출력인 문제

 

간단히 배열로 생각해서 풀고 내장 라이브러리 사용했는데 시간초과가 발생했다. for문에서 index()를 사용해서 n^2이 되서 그런가 다른 방법으로 풀어야겠다 생각했고 딕셔너리로 포켓몬 입력값을 받으면서 key가 포켓몬과 인덱스일때 두가지로 설정해서 풀었다.