[백준] 블로그 21921 java

오늘내일·2024년 6월 6일
0

최적의 풀이는 아니지만 문제 접근하는 방법이 참고가 될 수 있지 않을까해서 올려봅니다. 코드에 주석 참고해주세요.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class 블로그_21921_2 {
  // 블로그 시작한지 N일
  // X일동안 가장 많이 들어온 방문자 수와 기간을 구하라  --> 부분배열 확인이라 슬라이딩 윈도우
  // 최대 방문자가 0이면 SAD 출력
  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[] board = new int[n];
    st = new StringTokenizer(br.readLine());
    for (int i = 0; i < n; i++) {
      board[i] = Integer.parseInt(st.nextToken());
    }

    // 처음 윈도우 설정
    int window = 0;
    for (int i = 0; i < x; i++) {
      window += board[i];
    }

    // 배열 순회하며 윈도우 설정(새로운 거 하나 더하고 예전거 하나 빼고) 후 최대값 확인 및 카운트
    int max = window;
    int maxCount = 1;
    for (int i = x; i < n; i++) {
      window = window + board[i] - board[i - x];

      if (window > max) {
        max = window;
        maxCount = 1;
      } else if (window == max) {
        maxCount++;
      }
    }

    if (max == 0) {
      System.out.println("SAD");
    } else {
      System.out.println(max);
      System.out.println(maxCount);
    }
  }
}
profile
다시 시작합니다.

0개의 댓글