https://www.acmicpc.net/problem/21921
문제

풀이
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int x = Integer.parseInt(st.nextToken());
int[] arr = new int[n];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++)
arr[i] = Integer.parseInt(st.nextToken());
int sum = 0;
for (int i = 0; i < x; i++) sum += arr[i];
int max = sum;
int maxCnt = 1;
for (int i = x; i < n; i++) {
sum += arr[i] - arr[i-x];
if (max == sum) maxCnt++;
else if (max < sum) {
max = sum;
maxCnt = 1;
}
}
if (max == 0) {
System.out.println("SAD");
return;
}
System.out.println(max + "\n" + maxCnt);
}
}
문제 난이도 자체는 실버 3 답게 그렇게 어렵지 않은 편이라고 생각한다.
다만, 투포인터 그 중에서도 슬라이딩 윈도라는 것을 깨닫지 못하면 시간초과(25000 x 8000)에 걸릴 수 있음에 유의해야 한다.
동일한 간격의 크기를 비교하는 것이기 때문에 한 칸씩 미뤄가며 계산한다. 이 전의 빠지는 값이 새로 추가되는 값보다 작다면, 총합은 커지게 된다. 우리는 그 값을 추적하며 값이 같을 때 카운트 값만 증가시켜 주면 된다.
'문제 풀이 > 백준' 카테고리의 다른 글
| [백준]20922번. 겹치는 건 싫어 (JAVA) (0) | 2024.03.30 |
|---|---|
| [백준] 2559번. 수열 (JAVA) (0) | 2024.03.30 |
| [백준] 1436번. 영화감독 숌 (JAVA) (0) | 2024.03.25 |
| [백준] 1149번. RGB거리 (JAVA) (0) | 2024.03.19 |
| [백준] 1439번. 뒤집기 (JAVA) (0) | 2024.03.19 |