반응형
https://www.acmicpc.net/problem/1247
import sys
ssr = sys.stdin.readline
for _ in range(3):
n = int(ssr())
s = 0
for _ in range(n):
s += int(ssr())
if s == 0:
print('0')
elif s < 0:
print('-')
else:
print('+')
그렇게 어려운 문제는 아닌데 시간을 줄이는 방법을 좀 고민해보면 좋을 것 같습니다. 가장 빠르게 푸신 분을 보니까 BytesIO라는 메서드를 사용하셨던데 저는 잘 모르기도 하고 뭔가 연산을 빨리 가능하도록 하는 것 같습니다. 메모리에서 바로 불러오기 때문에 빠른 연산이 가능하다는데 둘 다 같은 입력을 터미널에서 받는데 어떤 부분에서 차이가 생기는지 잘 모르겠네요. 컴퓨터 관련 지식이 필요할 것 같습니다.
추가//
chatgpt에 가장 빠른 코드와 비교해달라고 해서 얻은 대답입니다.
정리하자면,
1. 입력 함수의 반복 호출을 피해라.
2. map 함수를 통해 한 번에 변환하라.
수정한 코드는 이것입니다.
import sys
ssr = sys.stdin.readline
for _ in range(3):
n = int(ssr())
s = sum(map(int, [ssr() for _ in range(n)]))
if s == 0:
print('0')
elif s < 0:
print('-')
else:
print('+')
BytesIO를 쓰지 않아도 40ms정도 빨라지네요. 리스트 컴프리헨션을 쓰더라도 어차피 반복문을 쓰는 거나 다름없지 않나 싶었는데 이런 차이가 있을 줄은 몰랐습니다. chatgpt가 있는 세상을 사는게 정말 즐겁네요.
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ][Python]1075 풀이 (0) | 2023.06.23 |
---|---|
[BOJ][Python]1009 풀이 (0) | 2023.06.22 |
[BOJ][Python]1264 풀이 (0) | 2023.06.20 |
[BOJ][Python]14501 풀이 (0) | 2023.03.04 |