본문 바로가기

ALGORITHM

백준 21921 블로그 (Java)

1. 문제 링크

 

21921번: 블로그

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

www.acmicpc.net

 

2. 문제 및 입출력예제

3. 문제 풀이

주어진 기간의 총 방문자 수를 구하는 문제이다.

이런 문제는 누적합을 이용하면 빠르게 구할 수 있다.

입력받을 때마다 누적합을 배열에 저장한다.

기간이 3일 경우 반복문을 이용해 arr[N+3] - arr[N]을 하면 그 기간동안의 누적 방문자 수가 나온다

 

4. 코드

import java.io.BufferedReader;
import java.io.IOException;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new java.io.InputStreamReader(System.in));
		//누적합
		String[] nx = br.readLine().split(" ");
		int N = Integer.parseInt(nx[0]);
		int X = Integer.parseInt(nx[1]);
		
		int sum=0;
		int[] visit = new int[N+1];
		String[] split = br.readLine().split(" ");
		for(int i=0;i<N;i++) {
			int temp = Integer.parseInt(split[i]);
			sum+= temp;
			visit[i+1] = sum;
		}
		
		int max=0, cnt=0;
		for(int i=0;i<N-X+1;i++) {
			int temp = visit[i+X] - visit[i];
			if(temp == max) {
				cnt++;
			}
			else if(temp > max) {
				max = temp;
				cnt = 1;
			}
		}
		if(max == 0) {
			System.out.println("SAD");
		}
		else {
			System.out.println(max);
			System.out.println(cnt);		
		}
	}	
}

 

'ALGORITHM' 카테고리의 다른 글

백준 10431 줄세우기 (Java)  (0) 2023.03.08
백준 11866 요세푸스 문제 0 (Java)  (0) 2023.03.07
백준 1003 피보나치 함수 (Java)  (0) 2023.03.05
백준 1074 Z (Java)  (0) 2023.03.04
백준 16435 스네이크버드 (Java)  (0) 2023.03.03