풀이 1
처음부터 탐색
n, k, b = map(int, input().split()) # n번까지의 번호가 붙은 횡단보도, k개의 신호등, 부서진 신호등 개수 b
lights = [0 for _ in range(n+1)] # 신호등 표시
for _ in range(b):
lights[int(input())] = 1 # 부서진 신호등 1로 표시
l = 0
answer = float('inf') # 최소 수리해야하는 신호등 개수
tmp = 0 # 수리해야하는 신호등 개수 임시로 담는 변수
for i in range(1, n+1):
if lights[i]: # 부서진 신호등이라면 + 1
tmp += 1
if i - l == k: # k 개수 충족됐다면
if tmp < answer: # 고칠 신호등 개수 최소로 갱신
answer = tmp
l += 1 # 다음 구역으로 넘어가기
if lights[l]: # 이전 지점이 부서진 신호등이었다면
tmp -= 1 # 빼주기
print(answer)
풀이 2
처음 구역 더하고 다음 구역부터 탐색 (👍🏻)
n, k, b = map(int, input().split())
lights = [0 for _ in range(n+1)]
for _ in range(b):
lights[int(input())] = 1
l = 1
tmp = sum(lights[1:k+1]) # 처음 구역 (1~k까지) 부서진 신호등 다 더하기
answer = tmp
for i in range(k+1, n+1):
tmp -= lights[l] # 이전 지점(시작지점) 신호등 빼기
l += 1 # 옮기기
tmp += lights[i] # 끝 지점 신호등 더하기
if tmp < answer: # 고칠 신호등 개수 최소로 갱신
answer = tmp
print(answer)
'Algorithm > Baekjoon' 카테고리의 다른 글
[Python] 14496. 그대, 그머가 되어 (0) | 2022.01.14 |
---|---|
[Python] 20309. 트리플 소트 (0) | 2022.01.14 |
[Python] 4485. 녹색 옷 입은 애가 젤다지 ? (0) | 2022.01.14 |
[Python] 9663. N-Queen (0) | 2022.01.14 |
[Python] 2098. 외판원 순회 (0) | 2022.01.12 |