컴퓨터공학 💻 도서관📚
백준 1247번 부호 (해결과정) 본문
브론즈 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
'💣😝알고리즘 문제(CAM) > 파이썬' 카테고리의 다른 글
백준 1380번 귀걸이 (0) | 2024.09.01 |
---|---|
백준 1436번 영화감독 숌 : 풀이 아이디어 (복습) (0) | 2024.08.25 |
Comments