오르막길
[JAVA] 21921. 블로그 본문
문제
찬솔이는 블로그를 시작한 지 벌써 𝑁 일이 지났다.
요즘 바빠서 관리를 못 했다가 방문 기록을 봤더니 벌써 누적 방문 수가 6만을 넘었다.
찬솔이는 𝑋 일 동안 가장 많이 들어온 방문자 수와 그 기간들을 알고 싶다.
찬솔이를 대신해서 𝑋 일 동안 가장 많이 들어온 방문자 수와 기간이 몇 개 있는지 구해주자.
입력
첫째 줄에 블로그를 시작하고 지난 일수 𝑁 와 𝑋 가 공백으로 구분되어 주어진다.
둘째 줄에는 블로그 시작 1 일차부터 𝑁 일차까지 하루 방문자 수가 공백으로 구분되어 주어진다.
출력
첫째 줄에 𝑋 일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다.
만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다.
제한
- 1≤𝑋≤𝑁≤250,000
- 0≤ 방문자 수 ≤8,000
Code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_21921 {
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;
int cnt = 1;
for (int i=0; i<X; i++) {
sum += arr[i];
}
int max = sum;
for (int i=X; i<N; i++) {
sum = sum - arr[i-X];
sum = sum + arr[i];
if (sum>max) {
cnt=1;
max = sum;
}
else if (sum==max) {
cnt++;
}
}
if (max!=0) System.out.println(max+"\n"+cnt);
else System.out.println("SAD");
}
}
Today I Learned
누적합? 슬라이딩 윈도우 문제라고 하는데 잘 풀었는지 모르겠다. 첫 초기화할때 max=sum 해주지 않아서 틀렸었다.
고치니까 바로 정답!
'백준 풀어보기' 카테고리의 다른 글
[JAVA] 13305. 주유소 (0) | 2024.05.02 |
---|---|
[JAVA] 1389. 케빈 베이컨의 6단계 법칙 (0) | 2024.05.02 |
[JAVA] 11047. 동전 0 (0) | 2024.04.25 |
[JAVA] 9017. 크로스 컨트리 (0) | 2024.04.23 |
[JAVA] 11724. 연결 요소의 개수 (0) | 2024.04.22 |