출처: 프로그래머스 코딩테스트 연습
https://programmers.co.kr/learn/courses/30/lessons/42586
def solution(progresses, speeds):
release = 0
answer = []
for i in range(len(progresses)):
# 작업 기간을 day라고 정의
# 100%에서 완료된 작업률만큼 빼주고 하루에 가능한 작업률로 나눠서 day를 구함
# 나누어 떨어지면 day는 몫을 그대로 정의
if (100-progresses[i]) % speeds[i] == 0:
day = (100-progresses[i])//speeds[i]
# 나누어 떨어지지 않으면 day는 (몫+1)로 정의
else:
day = (100-progresses[i])//speeds[i]+1
# release보다 day가 크면 새로운 날에 기능이 배포되는 것이므로 answer에 새로운 1 추가
# release는 day로 새롭게 정의
if release < day :
answer.append(1)
release = day
# release보다 day가 작거나 같으면 release에 같이 기능이 배포되는 것이므로 answer[-1]에 1 추가
else:
answer[-1] += 1
return answer
예전엔 아래 풀이⬇로 풀어서 for문을 2번이나 돌리고 days를 for문을 돌 때마다 슬라이싱을 했었는데 for문을 한 번만 사용하게 바꾸어보았다
day를 구해서 최댓값(release)을 계속 갱신시켜주면서 진행하는 코드이다
훨씬 효율적으로 돌아가는 것을 확인할 수 있었다
여전히 이게 스택과 큐를 이용한 것인지는......🤔
def solution(progresses, speeds):
days = []
answer = [1]
for i in range(len(progresses)):
if (100-progresses[i]) % speeds[i] == 0:
days.append(int((100-progresses[i])/speeds[i]))
else:
days.append(int((100-progresses[i])/speeds[i])+1)
for j in range(len(days)-1):
if days[j+1] <= max(days[:j+1]):
answer[-1] += 1
else:
answer.append(1)
return answer