이 문제의 경우 input()을 사용할 경우 계속 시간초과의 문제가 발생하였다.

먼저 문제는 다음과 같다.


주어진 입출력 예제가 빈약한데, 간단히 말해서 반복할 때마다 숫자를 입력하면, 그 숫자의 제곱값을 리턴하면 된다.

그래서 처음에는 다음과 같이 코딩을 하였다.

1
2
3
4
repeat = int(input())
for i in range(0, repeat):
    num = int(input())
    print(num**2)
cs

하지만 이렇게 하면 맨 처음에 언급했듯이 계속 시간초과라는 문제에 직면하게 된다.

그래서 결국 인터넷을 계속 검색했고, 딱 필요한 내용을 잘 정리한 블로그를 찾았다.

https://velog.io/@yeseolee/Python-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%85%EB%A0%A5-%EC%A0%95%EB%A6%ACsys.stdin.readline

 

[Python 문법] 파이썬 입력 받기(sys.stdin.readline)

파이썬으로 코딩 테스트를 준비한다면, 반드시 알아야 할 입력방식인 sys.stdin.readline()에 대한 정리 입니다.

velog.io

 

여기에서 언급하듯이 "반복문으로 여러줄을 입력 받아야 할 때는 input()으로 입력 받는다면 시간초과가 발생"하는 경우가 생긴다.

때문에, 반복문으로 여러줄 입력받을 때는 sys.stdin.readline()를 사용하는 것이 바람직하다.

 

sys.stdin.readline()는 디폴트로 string형을 가진다. 또한, 한줄 단위로 입력받기 때문에 개행문자(\n)를 같이 입력 받는다.  따라서 다음과 같은 형태로 사용을 하면된다.

1
2
import sys
= int(sys.stdin.readline())
cs

 

**참고로 atom editor의 hydrogen plugin으로 프로그램을 실행하게 되면 계속 ValueError가 발생하게 된다. 

atom editor로 인해서 발생하는 에러

그런데 또 백준이나 repl.it, 혹은 command창으로 실행시키면 잘만 돌아간다. 

인터넷에서도 찾으면 spyder와 같이 되지 않는 경우도 있으니, 아마 시스템상으로 무언가가 있는 듯하다.

그러니 당황하지 말자!!


 

이렇게 해서 나온 제대로 된 답은 다음과 같다.

1
2
3
4
5
import sys
repeat = int(input())
for i in range(0, repeat):
    num = int(sys.stdin.readline())
    print(int(num)**2)
cs

 

 

+ Recent posts