python_algorithm_basic python 백준 solved read sys readline stdin

[Python/파이썬] 백준 1247번 - 부호

Kwangjin Park

Aug 07, 2024 · 1 min read

Follow

문제

$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 0

chat_bubble 댓글남기기

댓글남기기