본문 바로가기
Problem Solving/BOJ

[BOJ][Python]1247 풀이

by NoiB 2023. 6. 21.
반응형

https://www.acmicpc.net/problem/1247

 

1247번: 부호

총 3개의 테스트 셋이 주어진다. 각 테스트 셋의 첫째 줄에는 N(1 ≤ N ≤ 100,000)이 주어지고, 둘째 줄부터 N개의 줄에 걸쳐 각 정수가 주어진다. 주어지는 정수의 절댓값은 9223372036854775807보다 작거

www.acmicpc.net

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