Algorithm Study/Python

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

728x90
반응형

Silver IV

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

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

 

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

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

www.acmicpc.net

 

풀이

import sys
N, M = map(int, sys.stdin.readline().split())
dogam = {}

for i in range(1, N+1):
    a = sys.stdin.readline().rstrip() 
    dogam[i] = a
    dogam[a] = i
    
for i in range(M):
    quiz = sys.stdin.readline().rstrip()
    if quiz.isnumeric():
        print(dogam[int(quiz)])
    else:
        print(dogam[quiz])

 

후기

  • 시간 초과, 런타임 에러(ValueError, KeyError)를 수차례 반복하고 나서야 풀어낸 문제

  • 딕셔너리 타입을 이용하는 Hash 구조의 경우 O(1)의 복잡도를 갖는다. → 시간 초과가 관건인 문제일 경우에 리스트보다 딕셔너리를 먼저 시도하도록 하자

  • 딕셔너리안에 '도감번호 : 포켓몬 이름'으로 정리하고 값을 가져올 때 keys(), values()를 통해 호출하는 방식도 있다. 그러나 문제풀이에 제한이 따로 없을 경우 입력되는 모든 값을 key로 읽어올 수 있게끔 설정하는 방식이 쉽게 풀이 할 수 있었다. 

 

  • rstip()을 사용하는 이유

      sys.stdin.readline()을 입력하면 데이터를 한 줄 단위로 가져오게 된다. 이때, 개행문자를 같이 가져온다. 만약 'pikachu'를 입력하고 엔터를 눌러 입력하게 되면, sys.stdin.readline()의 특성에 의해 'pikachu\n'를 읽어온다. rstrip()을 통해 개행문자가 입력되는 것을 방지할 수 있다.

      이전까지 rstrip()을 사용하지 않아도 불편함을 느끼지 않았던 것은 자료형을 정해주었기 때문이다. map, int, str 등을 사용하는 과정에서 개행문자까지 읽어오는 것이 방지되었기 때문이다.