https://www.acmicpc.net/problem/11441
11441번: 합 구하기
첫째 줄에 수의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄에는 A1, A2, ..., AN이 주어진다. (-1,000 ≤ Ai ≤ 1,000) 셋째 줄에는 구간의 개수 M이 주어진다. (1 ≤ M ≤ 100,000) 넷째 줄부터 M개의 줄에는
www.acmicpc.net
문제
N개의 수 A1, A2, ..., AN이 입력으로 주어진다. 총 M개의 구간 i, j가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄에는 A1, A2, ..., AN이 주어진다. (-1,000 ≤ Ai ≤ 1,000) 셋째 줄에는 구간의 개수 M이 주어진다. (1 ≤ M ≤ 100,000) 넷째 줄부터 M개의 줄에는 각 구간을 나타내는 i와 j가 주어진다. (1 ≤ i ≤ j ≤ N)
출력
총 M개의 줄에 걸쳐 입력으로 주어진 구간의 합을 출력한다.
예제 입력 1 복사
5
10 20 30 40 50
5
1 3
2 4
3 5
1 5
4 4
예제 출력 1 복사
60
90
120
150
40
예제 입력 2 복사
3
1 0 -1
6
1 1
2 2
3 3
1 2
2 3
1 3
예제 출력 2 복사
1
0
-1
1
-1
0
아이디어
이 문제는 이해도 쉽고 난이도도 어렵지 않은데 시간초과 때문에 오래 걸렸다.
총 6번의 시간 초과가 났는데 이 중 5번의 시간 초과는 7달 전 C++로 풀 때 그랬다.
나중에 C++로도 다시 풀어봐야겠다.
파이썬으로 시간 초과가 난 코드를 import sys 해주고 print 대신 sys.stdout.write 쓰고 백준 제출할 때 언어를 Python이 아니라 PyPy3로 했더니 맞았다!!
# 시간 초과 코드
T = int(input()) # 수의 개수
data = list(map(int, input().split()))
N = int(input()) # 구간 개수
result = []
for _ in range(N):
a, b = map(int, input().split())
result = data[a-1:b]
print(sum(result))
# 정답 코드
import sys
input = sys.stdin.readline
T = int(input()) # 수의 개수
data = list(map(int, input().split()))
N = int(input()) # 구간 개수
result = []
for _ in range(N):
a, b = map(int, input().split())
result = data[a-1:b]
result = sum(result)
sys.stdout.write(str(result)+'\n')
'Algorithm > 알고리즘 문제' 카테고리의 다른 글
[백준/BOJ][Python] 2751번 수 정렬하기 2 (0) | 2022.07.07 |
---|---|
[백준/BOJ][Python] 2747번 피보나치 수 (0) | 2022.07.06 |
[백준/BOJ][Python] 2941번 크로아티아 알파벳 (2) | 2022.07.05 |
[백준/BOJ][Python] 1292번 쉽게 푸는 문제 (0) | 2022.07.04 |
[백준/BOJ][Python] 10988번 팰린드롬인지 확인하기 (0) | 2022.07.03 |