코딩테스트
백준 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);
}
}