문제
https://www.acmicpc.net/problem/2531
풀이과정
각 번호별로 먹은 횟수를 1차원 배열에 기록했다. 여기서 인덱스는 음식의 번호를 의미한다.
이 문제에서는 K개라는 window크기가 정해져있으므로 window를 한칸씩 오른쪽으로 움직여가며 값을 계산했다. window가 옮겨질 때는 window맨 첫번째 수를 빼주고 다음 수를 하나 더해주는 방식으로 진행한다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
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());
st.nextToken();
int K = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(st.nextToken());
int[] plates = new int[N];
int[] record = new int[3001];//번호별 먹은 횟수
for(int i=0; i<N; i++){
plates[i] = Integer.parseInt(br.readLine());
}
int cnt = 1;
record[C] = 1;
for(int i=0; i<K; i++){
if(record[plates[i]]++ == 0){
cnt++;
}
}
int result = cnt;
if(N!=K){
for(int i=0; i<N-1; i++){
if(--record[plates[i]] == 0) cnt--;
if(record[plates[(i+K)%N]]++ == 0) cnt++;
result = Math.max(result, cnt);
}
}
System.out.println(result);
}
}
결과
'코딩문제풀이 > Baekjoon' 카테고리의 다른 글
[Java] 백준 12851번 : 숨바꼭질 2* (0) | 2023.04.14 |
---|---|
[Java] 백준 17070번 : 파이프 옮기기 1 (0) | 2023.04.07 |
[Java] 백준 3109번 : 빵집* (0) | 2023.03.31 |
[Java] 백준 22251번 : 빌런 호석 (0) | 2023.03.29 |
[Java] 백준 2075번 : N번째 큰 수 (0) | 2023.03.27 |