오르막길

[JAVA] 21921. 블로그 본문

백준 풀어보기

[JAVA] 21921. 블로그

nanalyee 2024. 5. 3. 22:14

문제

찬솔이는 블로그를 시작한 지 벌써 𝑁일이 지났다.

요즘 바빠서 관리를 못 했다가 방문 기록을 봤더니 벌써 누적 방문 수가 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