백준 알고리즘 15552번 문제

sihwan_e·2020년 4월 8일
0

입력
첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

출력
각 테스트케이스마다 A+B를 한 줄에 하나씩 순서대로 출력한다.

풀이

처음엔 단순히 쉬운 문제라고 생각했다.

case = int(input())
for i in range(case):
    a,b = map(int, input().split())
    print(a+b)

라고 생각하고 답안을 제출했는데, 채점이 16%에서 멈추더니 시간초과가 떳다.
파이썬은 엄청난 횟수의 반복과 연산이 필요한 프로그램 또는 데이터 압축 알고리즘 개발 프로그램등을 만드는 것은 어렵다. 즉 대단히 빠른 속도를 요구하거나 하드웨어를 직접 건드려야 하는 프로그램에는 어울리지 않는다.(Do it! 점프 투 파이썬 발췌)
언어 자체의 문제 인 것같다.
그래서 input() 대신에 sys.stdin.readline()을 사용했다.
(풀이)

import sys
case=int(input())
for i in range(case):
    a,b=map(int, sys.stdin.readline().split())
    print(a+b)

input대신에 sys.stdin.readline을 처음 쓰게 되며 sys.stdin.readline에 대해 공부해보는 시간을 가질수 있었다.
코드 자체에는 문제가 없엇으니 시간초과로 문제가 해결되지 않아 사용법을 검색해보았다.
_(추가 설명 및 다른 언어 빠른 입출력 방법)
Python

rstrip을 하라는 건 문자열 자체를 변수에 저장하고 싶을 때 얘기지, 개행문자가 맨 끝에 들어와도 int 변환이나 split()을 그대로 할 수 있습니다. 즉 int(sys.stdin.readline()), sys.stdin.readline().split() 이렇게 해도 아무 문제 없습니다. 참고로 이름이 꽤 길기 때문에 저는 input = sys.stdin.readline을 맨 처음에 함으로써 쓰는 편입니다.

라는 설명이고, 보통 파이썬으로 알고리즘 문제를 풀다가 시간초과에러가 생길때 사용된다고 한다.
입력의 수가 압도적으로 많아질때 생기는 속도차이를 대비하여 쓴다고한다.
그리고 코드의 앞에는 import sys가 붙게되는데, sys모듈은 파이썬이 제공하는 변수와 함수를 직접 제어할수 있게 해주는 모듈이다. 향후 더 자세히 다뤄 보기로하겠다..

profile
Sometimes you gotta run before you can walk.

0개의 댓글