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 |