잡동사니/[2022] 회로이론
[백준/C] 11659번 구간 합 구하기 4 - 슬라이딩 윈도우 알고리즘
heylo
2022. 12. 11. 02:27
https://www.acmicpc.net/problem/11659
11659번: 구간 합 구하기 4
첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j
www.acmicpc.net
슬라이딩 윈도우 알고리즘을 사용한다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#define MAX_STRING_SIZE 100001
int main() {
int n, m; // n: 숫자 개수, m: 구간 개수
int a, b; // a, b: 구간 끝
int i; // 반복
int arr[MAX_STRING_SIZE];
arr[0] = 0; // 이 코드 없어도 결과 정상적인 이유가 뭘까...
scanf("%d %d", &n, &m);
for (i = 1; i <= n; i++) {
scanf("%d", &arr[i]);
arr[i] += arr[i - 1];
}
for (i = 0; i < m; i++) {
scanf("%d %d", &a, &b);
printf("%d\n", arr[b] - arr[a - 1]);
}
return 0;
}
https://www.youtube.com/watch?v=uH9VJRIpIDY





아래는 시간초과 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#define MAX_STRING_SIZE 100001
int main() {
int n, m; // n은 입력할 숫자 개수/ m은 숫자 구간 개수
int i, k; // 반복
int a[MAX_STRING_SIZE];
int left, right, sum = 0;
scanf("%d%d", &n, &m);
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (i = 0; i < m; i++) {
scanf("%d%d", &left, &right);
for (k = left-1; k <= right-1; k++) {
sum += a[k];
}
printf("%d\n", sum);
sum = 0; // sum 초기화
}
}