백준 문제 풀이/백준 (JAVA)
JAVA 백준 2559 수열 (누적합)
gamja00
2024. 7. 12. 23:07
https://www.acmicpc.net/problem/2559
문제
- 첫째 줄에 N( 2 <= N <= 100000 )과 K( 1 <= K <= N )을 공백을 두고 입력.
- 둘째 줄에 온도를 나타내는 수 N개를 배열에 추가. 수( -100 <= 수 <= 100 )
- 입력된 N개의 온도에서 연속적인 K일의 온도의 합이 최대가 되는 값을 출력.
최종 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int maxTemperature = -10000000;
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
int[] list = new int[N];
int[] sum = new int[N - K + 1];
int count = 1;
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
int num = Integer.parseInt(st.nextToken());
list[i] = num;
if (i >= K) {
sum[count] = (num + sum[count - 1] - list[count - 1]);
count++;
} else {
sum[0] += num;
}
}
for (int i = 0; i < N - K + 1; i++) {
if (sum[i] > maxTemperature) {
maxTemperature = sum[i];
}
}
System.out.println(maxTemperature);
}
}
maxTemperature는 모두 -100이 100000일동안 나온다는 가정 하에 -10000000로 설정하였음.
i가 K번 더해지기 전까지는 0번에 더하고, K번 더해진 이후에는 이전에 더해졌던 것에 새로운 날짜를 더하고 가장 멀리 있는 한 날짜를 빼는 방식으로 누적합 배열을 채웠다.
메모리 초과가 날까봐 어떻게 해야 되나 싶었는데 다행이 메모리가 넉넉한 것 같다.