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을 넣어줘야겠다.
'개발 > python' 카테고리의 다른 글
[백준 10814번] 나이순 정렬 - python (0) | 2025.08.12 |
---|---|
[백준 2309번] 일곱 난쟁이 - python (1) | 2025.08.11 |
[알고리즘] 구간 합 알고리즘 (0) | 2025.03.26 |
[백준 1546번] 평균 - python (1) | 2024.11.23 |
[백준 11720번] 숫자의 합 - python (1) | 2024.11.23 |