https://www.acmicpc.net/problem/14465
14465번: 소가 길을 건너간 이유 5
첫 줄에 N, K, B (1 ≤ B,K ≤ N)가 주어진다. 그 다음 B줄에는 고장난 신호등의 번호가 하나씩 주어진다.
www.acmicpc.net
저는 슬라이딩 윈도우 개념을 이용해 문제를 해결하였습니다.
boolean배열을 통해 에러 지점을 확인하고 for문으로 true면 cnt값을 늘리고 i-k이 true면 cnt값을 줄이면서 result와 cnt를 비교해 문제를 해결하였습니다.
package BOJ.TwoPoint;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.function.Function;
public class BOJ_14465 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
Function<String,Integer> stoi = Integer::parseInt;
int n = stoi.apply(st.nextToken());
int k = stoi.apply(st.nextToken());
int m = stoi.apply(st.nextToken());
int[] errorPoint = new int[m];
boolean[] error = new boolean[n+1];
for(int i = 0 ; i < m ; i++){
int num = stoi.apply(br.readLine());
error[num] = true;
}
Arrays.sort(errorPoint);
int si = 0;
int ei = 0;
int result = n;
int cnt = 0;
for(int i = 1 ; i <= n; i++){
if(error[i]){
cnt++;
}
if(i > k){
if(error[i-k]){
cnt--;
}
}
if(i >= k){
result = Math.min(result,cnt);
}
// System.out.println(i+" "+result);
}
System.out.println(result);
}
}
'알고리즘' 카테고리의 다른 글
백준 2568번 전깃줄 - 2 (JAVA) (0) | 2022.03.19 |
---|---|
백준 14916번 거스름돈 (JAVA) (0) | 2022.03.18 |
백준 7662번 이중 우선순위 큐 (JAVA) (0) | 2022.03.16 |
백준 1715번 카드 정렬하기 (JAVA) (0) | 2022.03.16 |
백준 1981번 배열에서 이동 (JAVA) (0) | 2022.03.15 |