lazy_ren   9년 전

아래 소스와 같이 첫 줄 인풋받고,

인풋받은 만큼 반복해서 리스트로 받고(바로 answer += input() 도 해봤습니다ㅠㅠ) 리스트 다 더해서 정답구해라!

라고 했는데 채점중52%에서 멈추더니 시간초과가 나네요..

혼자서 python 공부하는지라 어디 물어볼 곳도 없고, 인터넷에 찾아봐도 애초에 시간초과 나는 이유를 정확히 모르니 찾기도 힘들고...염치불구하고 질문 남겨봅니다.

어떻게 해야 더 효율적으로 풀어서 해결할수있는거죠? 다른 분들은 ms 단위로 답이 나오시던데...

joonas   9년 전

헉! 전 85% 까지가서 시간초과를 받았습니다.

joonas   9년 전

이전에 파이썬으로 정답 맞으신 분의 소스를 참고하였습니다.

input() 이 아닌 sys.stdin.realine() 을 사용하시면 정답을 맞으실 것 같습니다. import sys 추가하시구요.

mongsiry013   9년 전

아무리 파이썬이라지만 50만번인데도 시간초과라니 ㅠ.ㅠ

그런데 파이썬2는 시간초과인데 파이썬3은 통과네요.

input() 50만번이 힘든작업인가;

파이썬3에서는 input()이 파이썬2의 raw_input()과 같은 것이고

파이썬3에는 파이썬2의 input()에 해당되는것이 없던거 같은데 문제가 있어서 없앤걸까요?

아시는분?

joonas   9년 전

입출력 스트림에 대한 문제 같습니다.

파이썬이 동적변수라지만 변수의 형태로 저장하기 위해서 input() 메소드 내에서 가공을 할텐데

raw_input() 은 문자열을 반환하고 input() 은 raw_input() 을 evaluate한 결과를 반환합니다.

sys.stdin.readline() 은 한 줄의 문자열를 반환하는데 이것을 int() 로 묶어서 정수로 변환하는게 더 빠른가봅니다.

다른 언어에도 똑같은 원리가 적용되지요.

Java에서는 Scanner 보다 Buffered~ 가 더 처리가 가볍고, C++에서는 cout 보다 printf 를 이용하는게 시간적인 측면에서 효율적이라고 알고있습니다.

C++은 함수오버로딩도 있고 해서 훨씬 오래 걸리는것 같지만요..

mongsiry013   9년 전

joonas님 감사합니다. 좋은거 배웠네요 ㅎ

joonas   9년 전

채점중 (95%) ... 에서 시간초과로 여러번 틀리면서 깨달을때마다 가슴이 아팠습니다.

lazy_ren   9년 전

다들 감사합니다...!

input()보다 빠른 방법이 있었군요. 

sys.stdin.readline()사용해보겠습니다.

lazy_ren   9년 전

596ms 걸려서 풀리네요!!

근데 그럼에도 불구하고 확실히 파이썬이 c++에 비하면 속도면에서는 밀리네요.

이건 그냥 언어의 특성때문에 그런건가요?

사실 학교에선 c만 하고있는데 파이썬을 접해보니 얘가 더 재밌는거같아서 혼자 독학하는중이거든요...

wnsqlehlswk   9년 전

484 MS걸리는 코드

string 으로 받아서 한번에 map()으로 형변환하면 더 빨라져요

smilingwon20   2달 전

최고 방법:파이썬 쓰지 말고PyPy3나 C++17을 쓰자!

댓글을 작성하려면 로그인해야 합니다.