Algorithm/Baekjoon

#백준 1620, 파이썬 / sys.stdin.readline

say! 2022. 10. 6. 15:34
728x90

- 시간 초과난 코드

# 백준 집합과 맵 : 1620번 - 나는야 포켓몬 마스터 이다솜

n, m = map(int, input().split()) # n개의 포켓몬 개수, m개의 맞춰야하는 문제 개수

# n개의 포켓몬 딕셔너리에 {번호, 포켓몬 이름}, {포켓몬 이름, 번호}입력받기
s = {}
for i in range(1, n + 1):
  pokemon = input()
  s[i] = pokemon
  s[pokemon] = i


for i in range(m):
  quiz = input()
  if quiz.isdigit() :  # 문제가 번호면 해당 포켓몬 이름 출력
    print(s[int(quiz)])
  else : # 문제가 알파벳이면 해당하는 번호 출력
    print(s[quiz])

사실 다른분의 코드를 참고해서 풀었다.

딕셔너리에 {번호, 포켓몬 이름}, {포켓몬 이름, 번호} 이런식으로 넣을 생각을 못하고

한번만 {번호, 포켓몬 이름} 넣은 후 값으로 키를 찾으려고 복잡하게 생각하고 있었다.

 

 

- 통과한 코드

# 백준 집합과 맵 : 1620번 - 나는야 포켓몬 마스터 이다솜

import sys
input = sys.stdin.readline

n, m = map(int, input().split()) # n개의 포켓몬 개수, m개의 맞춰야하는 문제 개수

# n개의 포켓몬 딕셔너리에 {번호, 포켓몬 이름}, {포켓몬 이름, 번호}입력받기
s = {}
for i in range(1, n + 1):
  pokemon = input().rstrip()
  s[i] = pokemon
  s[pokemon] = i


for i in range(m):
  quiz = input().rstrip()
  if quiz.isdigit() :  # 문제가 번호면 해당 포켓몬 이름 출력
    print(s[int(quiz)])
  else : # 문제가 알파벳이면 해당하는 번호 출력
    print(s[quiz])

input()으로만 풀었을 때는 시간초과가 났다.

구글링해보니까 sys.stdin.readline으로 변경하면 시간초과를 해결할 수 있다고 한다.

대신 엔터가 사용되므로 rstrip()을 꼭 붙혀줘야한다.

 

 

 

입력 속도 비교

여러가지 언어와 입력 방법을 이용해서 시간이 얼마나 걸리는지 비교해 보았습니다. 방법: 첫째 줄에 정수의 개수 N (= 10,000,000), 둘째 줄부터 N개의 줄에 한 개의 자연수(10,000 이하)가 적힌 파일

www.acmicpc.net

 

 

Python 백준 문제풀이 시 입출력 정리

input() : 한 줄의 문자열을 입력 map() : 리스트의 모든 원소에 각각 특정한 함수를 적용할 때 사용 # 공백을 기준으로 구분된 데이터를 입력 받을 떄 data = list(map(int, input().split())) # 공백을 기준으로

paris-in-the-rain.tistory.com