문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42586
풀이
이 문제 유형이 스택/큐 문제라고 지정되어 있긴 하지만, 스택이나 큐를 사용하지 않고 풀이하였다.
문제 풀이 아이디어는 아래와 같다.
우선 ceil 내장 함수를 사용해 완료되기까지 걸리는 날짜를 새로운 배열 rests에 저장한다.
rests 배열을 순회하며, 현재 인덱스의 이전까지의 최대값(max_time)보다 큰 값이 나타날 때까지의 누적값(cnt)를 키워간다.
max_time은 아직까지 배포하지 못한 기능 중 개발 완료까지 걸리는 시간의 최대값이다. 그렇기에 max_time을 넘어가는 rest가 나타난다는 것은 그 기능부터는 나중에 배포되어야 한다는 것이다.
따라서 max_time을 넘어가는 큰 값이 나타나면, 그 때의 cnt는 함께 배포할 수 있는 기능들의 수이므로, 이를 정답 배열에 넣는다.
위 과정을 반복하다가, 최종적으로 배열에 남아있는 작업들의 수를 정답 배열에 넣는다. (이들은 함께 배포할 수 있는 기능들)
from math import ceil
def solution(progresses, speeds):
answer = []
num = len(progresses)
rests = [ceil((100 - progress) / speed) for progress, speed in zip(progresses, speeds)] # 완료될 때까지 걸리는 일수
cnt = 0
max_time = rests[0]
for rest in rests:
if max_time < rest: # 아직 배포하지 못한 기능 중 개발이 가장 오래 걸리는 기능보다 더 개발이 오래 걸리는 기능이 나타나면, 이 기능부터는 이전 기능을 모두 배포한 이후에 배포되어야하는 기능
answer.append(cnt)
cnt = 0
cnt += 1
max_time = max(max_time, rest) # 최대 일수 업데이트
answer.append(cnt)
return answer
'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스 Lv.3] 순위 (Python) (0) | 2024.09.29 |
---|---|
[프로그래머스 Lv.3] 가장 먼 노드 (Python) (1) | 2024.09.28 |
[프로그래머스 Lv.2] 주식가격 (Python) (5) | 2024.09.21 |
[프로그래머스 Lv.4] 도둑질 (Python) (0) | 2024.08.30 |
[프로그래머스 Lv.3] 등굣길 (Python) (0) | 2024.07.27 |