백준 21921번 - 블로그

박진형·2021년 9월 5일
0

algorithm

목록 보기
89/111

문제 풀이

슬라이딩 윈도우 기법을 이용하면 간단하게 풀리는 문제.
먼저 1일차부터 X일동안 방문자 수를 체크하고, 그 후에 오른쪽으로 창문을 밀듯이 밀면서 양끝 값을 더해주고 빼면서 확인하면된다. 최대값이 같으면 횟수 또한 세어주면 된다.

문제 링크

boj/21921

소스코드

PS/21921.java

    import java.io.*;
    import java.util.*;


    public class Main {
        static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));


        static class Room
        {
            List<User> users = new ArrayList<>();


        }

        static public class User implements  Comparable<User>
        {
            int level;
            String nickName;

            public User(int level, String nickName) {
                this.level = level;
                this.nickName = nickName;
            }



            @Override
            public int compareTo(User o) {
                return nickName.compareTo(o.nickName);
            }
        }

        public static void main(String[] args) throws IOException {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int n = Integer.parseInt(st.nextToken());
            int x = Integer.parseInt(st.nextToken());
            st = new StringTokenizer(br.readLine());
            int []arr = new int [n];
            for(int i=0;i<n;i++)
            {
                arr[i] = Integer.parseInt(st.nextToken());
            }
            int sum =0;
            for(int i=0;i<x;i++)
            {
                sum+= arr[i];
            }
            int ans = sum;
            int ans_cnt =1;
            for(int i= x;i<n;i++)
            {
                sum += arr[i];
                sum -= arr[i-x];
                if(ans < sum) {
                    ans = sum;
                    ans_cnt = 1;
                }
                else if(ans == sum) {
                    ans_cnt++;
                }
            }
            if(ans ==0)
            {
                bw.write("SAD");
            }
            else {
                bw.write(Integer.toString(ans) + "\n" + Integer.toString(ans_cnt));

            }
            bw.flush();

        }


    }

0개의 댓글