[14465번] 소가 길을 건너간 이유5 ( 슬윈, 유무 판단은 0과 1로 )

알쓸코딩·2023년 12월 6일
0

코테 문제들

목록 보기
44/113


✅ 윈도우 for문

이것도 똑같이 현재 구간에서 좌우로 1씩 플러스 마이너스 연산해주면 된다!
그리고 나는 수리해야 하는 걸 1로, 나머지는 0으로 해줬다.


✅ 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	static int light[];

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;

		st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());
		int b = Integer.parseInt(st.nextToken());

		light = new int[n];

		for (int i = 0; i < b; i++) {
			int broken = Integer.parseInt(br.readLine());
			light[broken - 1] = 1; //고장난 부분을 1로
		}

		int start = 0;
		int end = k;
		int min = Integer.MAX_VALUE;
		int cnt = 0;

		// 초기 구간에서 수리해야 하는 전구 개수 계산
		for (int i = 0; i < k; i++) {
			if (light[i] == 1) {
				cnt++; // 수리해야 할 것
			}
		}
		min = Math.min(min, cnt);

		// 나머지 구간에 대해 수리해야 하는 전구 개수 계산
		for (int i = k; i < n; i++) {
			int j = i - k;
			if (light[j] == 1) {
				cnt--;
			}
			if (light[i] == 1) {
				cnt++;
			}
			min = Math.min(min, cnt);
		}

		System.out.println(min);

	}
}

profile
알면 쓸데있는 코딩 모음!

0개의 댓글