코테/백준

[백준/JAVA] 21921번: 블로그

imname1am 2023. 7. 25. 21:28
반응형

🔺 문제

 

21921번: 블로그

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

www.acmicpc.net

 

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.util.*;
import java.io.*;
 
public class Main {
    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[] A = new int[N + 1];
        int[] sum = new int[N + 1];    // 누적합 
        
        st = new StringTokenizer(br.readLine(), " ");
        for(int i = 1 ; i <= N ; i++) {
            A[i] = Integer.parseInt(st.nextToken());
            sum[i] = sum[i - 1+ A[i];
        }
 
        // 🔔 슬라이딩 윈도우 🔔
        int max = Integer.MIN_VALUE;
        int cnt = 0;
        
        for(int i = X ; i <= N ; i++) {
            int tmp = sum[i] - sum[i - X]; // 📍 (i-X) ~ i까지의 구간 합 📍
            
            if(tmp > max) {
                max = tmp;
                cnt = 1; // 카운팅 값 갱신
            }
            else if(tmp == max) {
                cnt++;
            }
        }
        
        // 출력
        if(max == 0) {
            System.out.println("SAD");
            return;
        }
        else {
            System.out.println(max);
            System.out.println(cnt);
        }
    }
}
cs
✅ 해결 아이디어
✔ 누적 합 + 슬라이딩 윈도우

 

 


🔺 다른 풀이들

- 깔끔한 설명~~ (복습용)

 

[BJ21921] 블로그

백준 - 블로그 문제 링크 https://www.acmicpc.net/problem/21921 21921번: 블로그 첫째 줄에 $X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다. 만약 최대

yeomss.tistory.com

 

 

- 투 포인터를 활용한 풀이

 

[알고리즘] 백준 21921 - 블로그

https://www.acmicpc.net/problem/21921찬솔이는 블로그를 시작한 지 벌써 $N$일이 지났다.요즘 바빠서 관리를 못 했다가 방문 기록을 봤더니 벌써 누적 방문 수가 6만을 넘었다.찬솔이는 $X$일 동안 가장 많

velog.io


💬 느낀 점

회피해왔던 슬라이딩 윈도우..

이제는 더 이상 물러날 곳이 없다-!

 

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

✔ ChatGPT...

 

✔ 슬라이딩 윈도우 개념

 

[Java]투 포인터 / 슬라이딩 윈도우 알고리즘

비슷하면서도 다른 두 알고리즘을 설명하겠습니다. 공부를 목적으로 진행하는 포스팅으로 만약 틀린 부분이 있거나 미흡한 점이 있다면 피드백 부탁드리겠습니다. 투 포인터와 슬리이딩 윈도

bbangson.tistory.com

 

[Java] 슬라이딩 윈도우(Sliding Window) 알고리즘

슬라이딩 윈도우 알고리즘은 배열 요소의 일정 범위 값을 비교할때 사용하면 유용한 알고리즘 입니다. 동작방식 일정 정수로 이루어진 배열 int[] arr= {3,1,5,3,4,1,5,7,5,1,8} 가 있다면, 길이가 5인 배

tylee82.tistory.com

 

반응형