본문 바로가기
알고리즘/백준

[JAVA]백준_2531_회전초밥

by 박 현 황 2021. 4. 16.

문제링크

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

 

2531번: 회전 초밥

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

www.acmicpc.net

 

 

 

package BOJ;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main_2531 {
    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 d = Integer.parseInt(st.nextToken()); //초밥의 가짓수
        int k = Integer.parseInt(st.nextToken()); //연속해서 먹는 접시의 수
        int c = Integer.parseInt(st.nextToken()); //쿠폰번호

        int arr[] = new int[N]; //초밥 저장할 배열열
        boolean sushi[] ; //이 초밥 먹었는지?

        for(int i=0;i<N;i++) arr[i] = Integer.parseInt(br.readLine());

        int start = 0;
        int end = start+1;
        int res = Integer.MIN_VALUE; //가능한 다양한 종류의 초밥을 먹을 수 있는 경우의 수

        while(true){
            if(start == N) break;
            int len = 1;

            sushi = new boolean[d+1];
            sushi[arr[start]] = true;

            //현재 start에 대해서 얼마만큼 먹을 수 있는지 계산하기
            while(true){
                if(len == k){
                    sushi[c] = true;
                    int cnt = 0;
                    for(int i=0;i<=d;i++){
                        if(sushi[i]) cnt++;
                    }
                    res = Math.max(res,cnt);
                    start++; //start++해주고
                    if(start == N-1) end = 0;
                    else end = start+1;
                    break; //다음으로넘어가기
                }
                sushi[arr[end++]] = true;
                len++;
                if(end==N){
                    end = end-N; //다시 처음부터 시작?
                }
            }
        }
        System.out.println(res);
    }
}

'알고리즘 > 백준' 카테고리의 다른 글

[JAVA]백준_2458_키순서  (0) 2021.04.18
[JAVA]백준_7662_이중 우선순위 큐  (0) 2021.04.18
[JAVA]백준_2470_두용액  (0) 2021.04.15
[JAVA]백준_17836_ 공주님을구해라  (0) 2021.04.14
[JAVA]백준_1806_부분합  (0) 2021.04.14