본문 바로가기
코딩/백준-자바

[자바] 백준 21921번: 블로그

by 철없는민물장어 2023. 3. 1.
728x90
반응형

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

 

21921번: 블로그

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

www.acmicpc.net

 

앞에서부터 x일씩 묶어서 최대방문자 수를 비교한다.

최대방문자를 갱신했다면 max값을 바꾸고 count를1로 만든다.

최대방문자수와 같다면 count만 1 증가시킨다.

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

public class P21921 {

	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;
		for (int i = 0; i < x; i++) {
			sum += arr[i];
		}
		int sum_max = sum;
		int count = 1;

		for (int i = 0; i < n - x; i++) {
			sum -= arr[i];
			sum += arr[i + x];
			if (sum > sum_max) {
				sum_max = sum;
				count = 1;
			} else if (sum == sum_max) {
				count++;
			}
		}

		if (sum_max == 0) {
			System.out.println("SAD");
		} else {
			System.out.println(sum_max);
			System.out.println(count);
		}
	}

}

방문자수를 비교하기 위해 for문을 돌릴 때,

맨 앞이나 맨 끝에 위치한 날을 빠뜨리지 않게 주의하자.

(내 코드에서는 sum_max와 count를 초기화하면서 맨 앞에 위치한 x일만큼의 값을 미리 넣어두었다)

728x90
반응형

댓글