이번 시간에는 "프로그래머스 고득점 kit" "스택/큐" 카테고리에 있는 기능개발 문제를 풀어보겠습니다.
먼저, 진행율과 속도 배열을 이용하여 모든 작업의 남은 일수를 구합니다.
남은 일수를 구하는 식은 100% 에서 현재 진행상황인 progress 값을 뺀 후, 속도인 speed 값으로 나눠준 후 올림을 해주는 것 입니다.
만약 아래의 예시의 경우 다음과 같은 결과가 나옵니다.
progresses = [95, 90, 99, 99, 80, 99]
speeds = [1, 1, 1, 1, 1, 1]
costs = [math.ceil((100-p)/s) for p,s in zip(progresses, speeds)]
# costs = [5, 10, 1, 1, 20, 1]
costs 를 순회하며 가장 큰 수의 경우 현재 날짜 변수 now 로 설정해주고 만약 입력 값이 now 보다 작을 경우에는 이미 작업이 완료된 경우 이므로 stack에 담습니다.
now 보다 큰 경우에는 이전 작업들이 한 번에 끝났음을 의미하고 다음 작업을 기다리는 상황이므로 stack 에 담겨진 elements 개수들을 answer 배열에 추가하고 stack 을 초기화 합니다.
마지막에 계산되지 않은 stack 이 있을 경우 answer 에 추가해주는 코드를 넣었습니다.
import math
def solution(progresses, speeds):
answer = []
stack = []
costs = [math.ceil((100-p)/s) for p,s in zip(progresses, speeds)]
now = costs[0]
for i in range(len(costs)):
if len(stack)!=0 and now < costs[i]:
answer.append(len(stack))
stack = [costs[i]]
now = costs[i]
else :
stack.append(costs[i])
if len(stack) != 0 :
answer.append(len(stack))
return answer
'알고리즘' 카테고리의 다른 글
코딩 테스트를 위해 꼭 알아야 할, Python 문법 정리 (0) | 2021.11.14 |
---|---|
[웅's 프로그래머스] 등굣길 - 파이썬(python) 풀이 (0) | 2021.09.22 |
[웅's 프로그래머스] 정수 삼각형 - 파이썬(python) 풀이 (0) | 2021.09.22 |
[웅's 프로그래머스] N으로 표현 - 파이썬(python) 풀이 (0) | 2021.09.22 |
[웅's 프로그래머스] 체육복 - 파이썬(python) 풀이 (0) | 2021.09.22 |