백준 - 블로그
문제 링크
https://www.acmicpc.net/problem/21921
문제 입출력
5 2
1 4 2 5 1
7
1
문제 풀이
package problem.BJ;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/*
* [입력]
* N(블로그를 시작하고 지난 일수) X(부분문자의 길이)
* hit(매일마다 블로그 방문자수)
* return X일 만큼 최대 방문자수와 그런 기간의 갯
*
* [주의]
* - 최대 방문자수가 0명이라면 SAD 출력
* */
public class BJ21921_블로그 {
static int N, X, cnt = 1;
static int[] hit; // 블로그 방문자 수
static StringBuilder sb = new StringBuilder();
// 슬라이딩 윈도우 기법 사용
public static void solve() {
// X일 마다의 방문자수의 합
int sum = 0;
for (int i = 0; i < X; i++) {
sum += hit[i];
}
// 최대 방문자 수
int max = sum;
for (int i = X; i < N; i++) {
sum -= hit[i - X]; // 첫 요소 제외
sum += hit[i]; // 새롭게 나타나는 요소 더하기
// 최댓값 갱신
if (max < sum) {
cnt = 0; // 최댓값 갱신되면 카운팅 0으로 초기화
cnt++;
max = sum;
} else if (max == sum) cnt++; // 최댓값과 같은 기간이 나오면 카운팅
}
if (max == 0) {
// 만약 최대방문자수가 0명이라면 SAD 출력
System.out.println("SAD");
return;
}
sb.append(max + "\n").append(cnt);
System.out.println(sb.toString());
return;
}
public static void main(String[] args) throws Exception {
System.setIn(new FileInputStream("input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 변수 입력
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
X = Integer.parseInt(st.nextToken());
hit = new int[N];
// 배열 입력
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
hit[i] = Integer.parseInt(st.nextToken());
}
solve();
}
}
슬라이딩 윈도우 기법을 사용.
만약 max 값을 갱신하면 cnt 가 0으로 초기화가 된다.
# 백준 블로그 java # BJ21921 블로그 java
728x90
'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 백준 알고리즘' 카테고리의 다른 글
[BJ2023] 신기한 소수 (0) | 2022.08.08 |
---|---|
[BJ12891] DNA 비밀번호 (0) | 2022.08.08 |
[BJ1244] 스위치 켜고 끄기 (0) | 2022.08.01 |
[BJ2309] 일곱 난쟁이 (0) | 2022.08.01 |
[BJ14889] 스타트와 링크 (0) | 2022.05.14 |