Java

[백준 21921] 블로그 (JAVA)

iheeeee6-6 2023. 2. 28. 16:29
728x90

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

 

21921번: 블로그

첫째 줄에 $X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다. 만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다

www.acmicpc.net

 

 

슬라이딩 윈도우 기법을 사용하는 문제이다.

1. 0~x 까지의 합을 sum과 max값으로 넣는다.

2. 1~x+1 , 2~x+2 ... 의 합들을 비교해야하므로, 

 1~x+1  합 = sum - 0번째 값 + x+1번째 값 

.

.

이렇게 계산한다 !

 

 

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));
		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 max =0;
		int count=1;
        
		for (int i = 0; i < n; i++) {
        	sum += arr[i];
            if (i == x - 1)
                max = sum;
            if (i > x - 1) {
                sum -= arr[i - x];
                if (max < sum) {
                    max = sum;
                    count = 1;
                }
                else if (max == sum) {
                	count++;
                }
            }
        }
		
		if (max == 0)
			System.out.println("SAD");
		else {
			System.out.println(max+"\n"+count);
		}
	}

}