반응형
안녕하세요.
오늘은 백준 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은 위 두 과정을 생략하기 때문에 더 빠르다고 합니다.
이 문제는 특히 반복문을 이용해 여러 줄을 입력받을때 두드러진다고 합니다.
코딩 참 어렵네요 ㅎ
반응형
'코딩 > 파이썬' 카테고리의 다른 글
[백준 파이썬] 1284번 집 주소 (B3) (0) | 2022.10.06 |
---|---|
[백준 파이썬] 1267번 휴대폰 요금 (B3) (0) | 2022.10.05 |
[백준 파이썬] 1032번 명령 프롬프트 (B1) (0) | 2022.09.15 |
파이썬 최솟값 구하기(feat.백준 1085 직사각형에서 탈출) (0) | 2022.09.13 |
파이썬 나눗셈 몫과 나머지 구하기(feat.백준 1271 엄청난 부자2) (0) | 2022.09.13 |