Algorithm/Baekjoon

[Python] 소가 길을 건너간 이유 5

느낌표 공장장 2022. 1. 14. 15:34

풀이 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