1. 문제
2. 접근법
처음엔 누적합 방식으로 접근하려고 했지만 감이 안잡혀 가장 생각나는 슬라이딩 윈도우 방식을 사용했다.
[슬라이딩 윈도우를 사용하여 최소 고장난 신호등 개수 계산]
- for 루프를 사용하여 구간을 오른쪽으로 한 칸씩 이동하면서 각 구간의 고장난 신호등 수를 계산
- 새로운 요소를 더하고, 이전 요소를 뺀다
- 현재 구간의 고장난 신호등 수를 min_count와 비교하여 최소값을 갱신
3. 코드
package week08;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Baek14465 {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int N = Integer.parseInt(stringTokenizer.nextToken()); //신호등 개수
int K = Integer.parseInt(stringTokenizer.nextToken()); //신호등 있어야될 개수
int B = Integer.parseInt(stringTokenizer.nextToken()); //신호등 번호
int[] arr = new int[N+1];
for (int i = 0; i<B; i++){
int a = Integer.parseInt(bufferedReader.readLine());
arr[a] = 1;
}
int count = 0;
for (int i = 1; i <= K; i++) {
count += arr[i];
}
int min_count = count;
for (int i = K+1; i <= N; i++) {
count += arr[i] - arr[i-K];
min_count = Math.min(min_count, count);
}
System.out.println(min_count);
}
}
'📖Algorithm > Sliding Window' 카테고리의 다른 글
자바 [Programmers] 2단계 - 할인 행사 (0) | 2024.12.06 |
---|