개발/python

[백준 11659번] 구간 합 구하기 4 - python

dotudy 2025. 3. 26. 11:18

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

 

작성 답안

import sys
input = sys.stdin.readline

N, M = map(int, input().split())
# print(N, M)

# 띄어쓰기 단위로 분할해서 저장
# array = list(map(int, input().split())) 
# print(array)

array = list(map(int, input().split()))[:N]

sum_array = []
for i in range(N):
    if i == 0:
        sum_array.append(array[i])
    else:
        sum_array.append(sum_array[i-1] + array[i])

# print(sum_array)
# print(array)

for k in range(M):
    i, j = map(int, input().split())
    if i == 1:
        print(sum_array[j-1])
        continue
    print(sum_array[j-1] - sum_array[i-2])

 

 

 

 

처음에 sys 모듈을 import하지 않고 아래의 코드만 제출했더니 시간 초과가 떴다.

문자열 한 줄 그대로 받아오는 것이라서 처리 과정이 적고 빠르다고 한다.

하지만 끝에 '\n'이 붙어있으니 strip()이나 rstrip()으로 제거하고 써야함을 기억하자.

 

 

파이썬 코테할 때 기본으로 써야하는 모듈인듯!!

 

 

다른 답안

import sys
input = sys.stdin.readline
suNo, quizNo = map(int, input().split())
numbers = list(map(int, input().split()))
prefix_sum = [0]
temp = 0

for i in numbers:
    temp = temp + i
    prefix_sum.append(temp)

for i in range(quizNo):
    s, e = map(int, input().split())
    print(prefix_sum[e] - prefix_sum[s-1])

 

list를 돌아서 temp에 쌓는 형식은 생각하지못했다.

문제에서 입력받는 i, j가 하나씩 밀려있어서 i-2이런식으로 하고 i == 1일 때는 따로 처리했는데

그러지 말고 처음에 0을 하나 넣어주는 것이 좋은 아이디어 같다.

이렇게 배열의 인덱스와 문제에서 요구하는 번호가 1씩 다를 때 이러한 방법을 사용해서 처음에 0번 배열에 0을 넣어줘야겠다.