Koala - 17기/코딩테스트 심화 스터디
[백준/Python] 14465번 : 소가 길을 건너간 이유 5
rlawjdgns02
2025. 1. 26. 01:29
https://www.acmicpc.net/problem/14465
입력
첫 줄에 N, K, B (1 ≤ B,K ≤ N)가 주어진다. 그 다음 B줄에는 고장난 신호등의 번호가 하나씩 주어진다.
출력
정상적으로 작동하는 연속 K개의 신호등이 존재하려면 최소 몇 개의 신호등을 수리해야 하는지 출력한다.
코드
n, k, b = map(int, input().split())
arr = [0 for _ in range(n)]
for _ in range(b):
arr[int(input())-1] = 1
left = 0
right = k-1
tmp = sum(arr[0:k])
ans = tmp
while right < n-1:
tmp = tmp - arr[left] + arr[right+1]
ans = min(tmp, ans)
left += 1
right += 1
print(ans)
풀이 과정
1. 고쳐야하는 고장난 신호등을 1로 표시
2. K 간격만큼에서 고쳐야하는 신호등 수를 그 1들의 합으로 계산 시작
3. 하나씩 옆으로 밀면서 첫번째 요소를 빼고 다음 요소를 더하며 최소값 업데이트