2531번: 회전 초밥
첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤
www.acmicpc.net
package Sliding_Window;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
public class Baekjoon_2531_회전초밥 {
public static void main(String[] args) throws Exception {
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[] sushi = new int[N];
boolean[] visited = new boolean[d+1];
for(int i = 0; i < N; i++) {
sushi[i] = Integer.parseInt(br.readLine());
}
int result = Integer.MIN_VALUE;
for(int i = 0; i < N; i++) {
int cnt = 1;
Arrays.fill(visited, false);
for(int j = i; j < (i+k); j++) {
if(!visited[sushi[j%N]]) {
visited[sushi[j%N]] = true;
cnt++;
if(sushi[j%N] == c) cnt--;
}
}
if(cnt == k+1) {
result = cnt;
break;
}
result = Math.max(result, cnt);
}
System.out.println(result);
}
}
'알고리즘 > BAEKJOON' 카테고리의 다른 글
| 21921 블로그_Sliding Window (0) | 2021.06.29 |
|---|---|
| 15565 귀여운 라이언_Two Pointers (0) | 2021.06.28 |
| 3273 두 수의 합_Two Pointers (0) | 2021.06.26 |
| 2018 수들의 합5_Two Pointers (0) | 2021.06.25 |
| 2617 구슬 찾기_Floyd Warshall (0) | 2021.06.24 |