Algorithm/문제 풀이 / / 2023. 6. 22. 22:17

[BAEKJOON_2531 - JAVA] 회전 초밥

반응형

문제

https://www.acmicpc.net/problem/2531

 

2531번: 회전 초밥

첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤

www.acmicpc.net

 

JAVA코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.StringTokenizer;

public class Main {

    private static int N, d, k, c;
    private static List<Integer> list = new ArrayList<>();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        d = Integer.parseInt(st.nextToken());
        k = Integer.parseInt(st.nextToken());
        c = Integer.parseInt(st.nextToken());

        HashSet<Integer> cnt = new HashSet<>();
        for (int idx = 0; idx < N; idx++) {
            list.add(Integer.parseInt(br.readLine()));
        }

        int max = 0;
        int start = 0;
        int end = k;

        while (start < N) {
            cnt.clear();
            cnt.add(c);

            if (end < start) {
                for (int idx = 0; idx < end; idx++) {
                    cnt.add(list.get(idx));
                }
                for (int idx = start; idx < N; idx++) {
                    cnt.add(list.get(idx));
                }
            } else {
                for (int idx = start; idx < end; idx++) {
                    cnt.add(list.get(idx));
                }
            }

            max = Math.max(max, cnt.size());

            start++;
            if (end == N)
                end = 1;
            else
                end++;
        }

        br.close();
        System.out.println(max);
    }

}
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유