컴퓨터공학 💻 도서관📚

백준 1247번 부호 (해결과정) 본문

💣😝알고리즘 문제(CAM)/파이썬

백준 1247번 부호 (해결과정)

들판속초록풀 2023. 10. 11. 20:29

브론즈 3 랭크의 1247번을 우연히 풀게 되었다.
그런데 아주 흥미로운 지식들을 수집할 수 있었다.

문제를 풀고 별거 아니네 하고 채점 버튼을 누른 순간

아주 불길한 "채점중" 문구가 사라지지 않았고 역시나 시간초과가 떴다.

시간제한이 2초이고 입력값의 최댓값도 100,000까지여서 "왜 시간초과가 뜨지???" 라고 생각했다.

순간 당황한 나는 바로 구글 형님들에게 달려가 도움을 요청했다.



검색 결과...

sys.stdin.readline()을 이용하여 입력을 받으라고 했다.
input 함수가  sys.stdin.readline()보다  느려서 시간초과가 떴던 것이었다.
이건 또 뭔 소린가???  input함수가 느리다고?


몇몇 구글 형님들이 왜 input함수가 더 느린지에 대한 자세한 설명은 생략하시기에
조금 더 검색을 해서 매우매우 친절하신 형님의 글을 볼 수 있었다.



1.  input() 내장 함수는 매개변수로 안내문구를 받을 수 있다.
따라서 입력받기 전 안내문구를 출력해야 한다.     ex)  input("안내 문구")
하지만, sys.stdin.readline()은 안내문구를 인수로 받지 않는다.

2.  input() 내장 함수는 입력받은 값의 개행 문자를 삭제시켜서 리턴한다.
즉, 입력받은 문자열에 rstrip() 함수를 적용시켜서 리턴한다.
반면에, sys.stdin.readline()은 개행문자를 포함한 값을 리턴한다.

이 두가지 이유로 input함수가 더 느리다는 것을 알게 되었다.

마지막으로 코드 최종본을 보여드리며 글을 줄일려 한다.

 

import sys                    
input = sys.stdin.readline      # input함수보다 빠른 입력 방법

for i in range(3):
    N = int(input())
    sum = 0
    
    for i in range(N):
        tmp  = int(input())
        sum += tmp
        
    if sum > 0:
        print("+")
    elif sum < 0:
        print("-")
    else:
        print("0")

 

참고)

https://buyandpray.tistory.com/7

 

[Python] Input vs. sys.stdin.readline 차이점?

Python으로 백준 문제를 풀 때 내장 함수 input()으로 입력을 받으면 시간 초과로 오답처리가 되고, sys 모듈의sys.stdin.readline()으로 입력을 받으면 시간 안에 채점이 되는 경우가 자주 발생한다. 왜 그

buyandpray.tistory.com

https://wikidocs.net/25

 

04-2 사용자 입출력

우리들이 사용하는 대부분의 완성된 프로그램은 사용자 입력에 따라 그에 맞는 출력을 내보낸다. 대표적인 예로 게시판에 글을 작성한 후 [확인] 버튼을 눌러야만(입력) 우리가 작성한…

wikidocs.net

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

 

Comments