코딩테스트

백준 21921번 블로그(자바) - 슬라이딩 윈도우

leeeehhjj 2023. 1. 18. 16:43

블로그 

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 512 MB 3822 1536 1245 39.536%

문제

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

요즘 바빠서 관리를 못 했다가 방문 기록을 봤더니 벌써 누적 방문 수가 6만을 넘었다.

찬솔이는 일 동안 가장 많이 들어온 방문자 수와 그 기간들을 알고 싶다.

찬솔이를 대신해서 일 동안 가장 많이 들어온 방문자 수와 기간이 몇 개 있는지 구해주자.

입력

첫째 줄에 블로그를 시작하고 지난 일수  가 공백으로 구분되어 주어진다.

둘째 줄에는 블로그 시작 1일차부터 일차까지 하루 방문자 수가 공백으로 구분되어 주어진다.

출력

첫째 줄에 일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다.

만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다.

제한

  •  1≤�≤�≤250,000
  •  0≤ 방문자 수 ≤8,000

예제 입력 1 복사

5 2
1 4 2 5 1

예제 출력 1 복사

7
1

예제 입력 2 복사

7 5
1 1 1 1 1 5 1

예제 출력 2 복사

9
2

처음에 period 값을 1로 갱신시켜야 한다!

import java.util.Scanner;

public class Main {
    static int n,x;
    static int[] visit;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        x = sc.nextInt();
        visit = new int[n];
        int answer = 0;
        int period = 0;
        for (int i = 0; i < n; i++) {
            visit[i] = sc.nextInt();
        }
        int sum = 0;
        for (int i = 0; i <n; i++) {
            sum += visit[i];
            if (i == x-1) {
                answer = sum;
                period = 1;
            }
            else if (i >= x) {
                sum -= visit[i-x];
                if (sum == answer) period++;
                else if (sum > answer) {
                    answer = sum;
                    period = 1;
                }
            }
        }
        if (answer == 0) {
            System.out.println("SAD");
            System.exit(0);
        }
        else System.out.println(answer + "\n" + period);
    }
}