문제
$N$개의 정수가 주어지면, 이 정수들의 합 S의 부호를 구하는 프로그램을 작성하시오.
입력
총 3개의 테스트 셋이 주어진다. 각 테스트 셋의 첫째 줄에는 $N(1 ≤ N ≤ 100,000)$이 주어지고, 둘째 줄부터 $N$개의 줄에 걸쳐 각 정수가 주어진다. 주어지는 정수의 절댓값은 9223372036854775807보다 작거나 같다.
출력
총 3개의 줄에 걸쳐 각 테스트 셋에 대해 $N$개의 정수들의 합 $S$의 부호를 출력한다. $S=0$이면 “0”을, $S>0$이면 “+”를, $S<0$이면 “-“를 출력하면 된다.
풀이
- 단순 사칙연산 문제
- 주의할 점: 연산 속도
input으로만 받아올 경우, 정답처리는 되지만 시간이 매우 오래 걸림- 이를
readline으로 받아주면 빠르게 처리 가능input = sys.stdin.readline으로 기본input을 재정의 해줌으로서sys.stdin.readline으로 대체 가능- ❗️만약
input으로 대체해주지 않고sys.stdin.readline을 적용해 준다면,.strip을 적용해 주어 개행문자가 생략되지 않도록 유의
- 입력속도 차이 비교
readline 함수에 대한 간략한 설명
sys모듈에서 제공하는 함수- 표준 입력 스트림에서 한 줄씩 데이터를 읽어오는 데 사용
input은 사용자에게 프롬프트를 보여주지만,sys.stdin.readline을 적용하면 그렇지 않음 (명령행 인자나 시스템 정보를 다루지 않음, 효율적 처리 가능)
코드
input 만을 활용한 코드
for _ in range (3):
n = int(input())
sum_n = 0
for _ in range (n):
sum_n += int(input())
if sum_n == 0:
print("0")
elif sum_n > 0:
print("+")
elif sum_n < 0:
print("-")
sys.stdin.readline을 적용하여 입력처리 속도를 높여준 코드
import sys
input = sys.stdin.readline
for _ in range (3):
n = int(input())
sum_n = 0
for _ in range (n):
sum_n += int(input())
if sum_n == 0:
print("0")
elif sum_n > 0:
print("+")
elif sum_n < 0:
print("-")
chat_bubble 댓글남기기
댓글남기기