본문 바로가기

코딩/파이썬

[백준 파이썬] 1247번 부호 (B3)

반응형

안녕하세요.

오늘은 백준 1247번 문제 부호 입니다.

 

문제는

3개의 테스트셋이 주어질때,

N개의 정수를 입력받고,

그 정수를 모두 더했을때 나오는 값의 부호를 출력하는 것.

 

입력값은

정수의 갯수인 N과 N개의 정수값입니다.

 

출력되는 값은 N개의 정수들의 합이 0이면 0을,

양수이면 +를, 음수이면 -를 출력하면 됩니다.

 

풀이는 간단합니다.

정수 N의 값을 입력받고,

N의 값만큼 정수를 입력받은 뒤

입력받은 정수를 더해서 양수이면 +를, 음수이면 -를, 0이면 0을 출력하면 됩니다.

for j in range(3):
    num = int(input())
    sum = int(0)

    for i in range(num):
        data = int(input())
        sum = sum+data

    if (sum>0):
        print("+")
    elif (sum<0):
        print("-")
    else:
        print("0")

혹시 이렇게 코드를 작성하셨나요?

이렇게 작성하면 시간초과라는 메시지를 보게 됩니다.

 

시간초과 문제를 해결하기 위해서는

input으로 값을 입력받으면 안되고

sys.stdin.readline을 이용해서 값을 입력받아야 합니다.

import sys

for j in range(3):
    num = int(sys.stdin.readline())
    sum = int(0)

    for i in range(num):
        data = int(sys.stdin.readline())
        sum = sum+data

    if (sum>0):
        print("+")
    elif (sum<0):
        print("-")
    else:
        print("0")

이게 정답코드입니다.

 

아니 근데

대체 왜 input은 안되고 sys라이브러리를 써야하는 걸까요?

 

결론부터 말하자면 input이 readline보다 느려서 그렇습니다.

 

input은 prompt message라는걸 출력하고, 개행 문자를 삭제한 뒤 데이터를 리턴하지만

readline은 위 두 과정을 생략하기 때문에 더 빠르다고 합니다.

 

이 문제는 특히 반복문을 이용해 여러 줄을 입력받을때 두드러진다고 합니다.

 

코딩 참 어렵네요 ㅎ

반응형