Skip to content

Commit 2a0bdb5

Browse files
committed
[Week08] BOJ 2531: 회전초밥
1 parent dbcc8dd commit 2a0bdb5

1 file changed

Lines changed: 55 additions & 0 deletions

File tree

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package week08.BOJ_2531_회전초밥;
2+
3+
import java.util.*;
4+
import java.lang.*;
5+
import java.io.*;
6+
7+
class BOJ2531 {
8+
public static void main(String[] args) throws IOException {
9+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10+
StringTokenizer st = new StringTokenizer(br.readLine());
11+
int N = Integer.parseInt(st.nextToken());
12+
int d = Integer.parseInt(st.nextToken());
13+
int k = Integer.parseInt(st.nextToken());
14+
int c = Integer.parseInt(st.nextToken());
15+
16+
int[] plates = new int[N];
17+
for (int i = 0; i < N; i++) {
18+
plates[i] = Integer.parseInt(br.readLine());
19+
}
20+
21+
Map<Integer, Integer> sushi = new HashMap<>();
22+
//처음 k개의 접시
23+
for (int i = 0; i < k; i++) {
24+
sushi.put(plates[i], sushi.getOrDefault(plates[i], 0) + 1);
25+
}
26+
27+
int start = 0;
28+
int end = k;
29+
int answer = sushi.size();
30+
if (!sushi.containsKey(c)) answer++;
31+
32+
while (start < N - 1) {
33+
//이전 스시 빼기
34+
if (sushi.get(plates[start]) == 1) { //1개 남았다면 아예 삭제
35+
sushi.remove(plates[start]);
36+
} else {
37+
sushi.put(plates[start], sushi.get(plates[start]) - 1);
38+
}
39+
40+
if (end >= N) end %= N; //원형 벨트
41+
sushi.put(plates[end], sushi.getOrDefault(plates[end], 0) + 1); //다음 초밥 넣기
42+
43+
int cnt = sushi.size();
44+
if (!sushi.containsKey(c)) {
45+
cnt++;
46+
}
47+
answer = Math.max(answer, cnt);
48+
49+
start++;
50+
end++;
51+
52+
}
53+
System.out.println(answer);
54+
}
55+
}

0 commit comments

Comments
 (0)