반응형
풀이
입력으로 주어진 progresses를 순차적으로 탐색하며 작업 진도가 얼마나 남았는지를 체크한다. 현재 작업을 배포하기 위해서 며칠이 필요한가를 체크하고 다음 작업이 해당 일 수만큼 작업했을 때 배포가 가능한지 체크한다. 배포가 불가능한 작업을 만날때까지 카운트를 하고 불가능한 작업을 만나면 다시 새롭게 위 과정을 반복한다.
코드
[Swift]
import Foundation
func solution(_ progresses:[Int], _ speeds:[Int]) -> [Int] {
var answer: [Int] = []
var day: Int = 0 // 작업 일 수
var count: Int = 0 // 배포가 가능한 작업의 개수
for i in 0..<progresses.count {
var restProgress: Int = 100 - progresses[i] // 남은 진도
let speed: Int = speeds[i]
// 현재 일수만큼 작업했을 때 배포가 가능하다면 배포 가능한 작업을 하나 증가시킨다.
if day * speed >= restProgress {
count += 1
} else { // 불가능하면 추가적으로 며칠이 더 필요한가를 체크한다.
answer.append(count)
count = 1
restProgress -= day * speed
if restProgress % speed == 0 {
day += restProgress / speed
} else {
day += restProgress / speed + 1
}
}
}
// 마지막에 answer배열에 0이 있으므로 하나를 pop해준다.
answer.append(count)
answer.removeFirst()
return answer
}
[Python]
def solution(progresses, speeds):
answer = []
day = 0 # 작업 일 수
count = 0 # 배포가 가능한 작업의 개수
for i in range(len(progresses)):
restProgress = 100 - progresses[i] # 남은 진도
speed = speeds[i]
# 현재 일수만큼 작업했을 때 배포가 가능하다면 배포 가능한 작업을 하나 증가시킨다.
if day * speed >= restProgress:
count += 1
else: # 불가능하면 추가적으로 며칠이 더 필요한가를 체크한다.
answer.append(count)
count = 1
restProgress -= day * speed
if restProgress % speed == 0:
day += restProgress // speed
else:
day += restProgress // speed + 1
# 마지막에 answer배열에 0이 있으므로 하나를 pop해준다.
answer.pop()
answer.append(count)
return answer
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[고득점 Kit(스택/큐)] 다리를 지나는 트럭 (Swift, Python) (0) | 2022.01.18 |
---|---|
[고득점 Kit(스택/큐)] 프린터 (Swift, Python) (0) | 2022.01.17 |
[고득점 Kit(탐욕법)] 단속카메라 (Python) (0) | 2022.01.03 |
[고득점 Kit(탐욕법)] 섬 연결하기 (Swift, Python) (0) | 2022.01.02 |
[고득점 Kit(탐욕법)] 구명보트 (Python) (0) | 2022.01.01 |
댓글