혜온의 이것저것

[코딩테스트 고득점 Kit] 스택/큐 기능개발 - Python 본문

Algorithm/Programmers

[코딩테스트 고득점 Kit] 스택/큐 기능개발 - Python

혜온 :) 2021. 9. 14. 15:03

[문제 이해 및 풀이]

우선 각 작업이 끝날 때 까지 남은 작업 일수를 day라는 리스트에 저장해주었다.

첫 번째 예시( progresses=[93,30,55], speeds=[1,30,5] )로 적용을 해보면 day=[7,3,9] 가 된다.

두번째 작업은 첫번째 작업이 끝날 때 까지 배포가 불가능하다가 첫번째 작업이 완료되는 7일째에 같이 배포가 된다.

그래서 생각한 방법은 day리스트에서 값이 앞의 값보다 작으면 지금까지의 작업의 수를 내보내는 방법이다.

 

결과값을 받아올 새로운 리스트 answer, 작업의 수를 count해줄 변수 x, 두 작업 일수 비교를 위한 변수 a와 b를 새로 선언해주었다.

stack의 pop()기능을 사용하여 남은 작업 일수를 비교하였다.

작업 일수를 비교했을 때 전의 숫자가 더 크다면 뒤의 작업은 배포될 수 없기 때문에 x의 값만 증가시켜주었다.

반대로 전의 수보다 뒤의 수가 더 크다면 앞의 작업과는 별개로 진행되는 작업이기 때문에 기존에 증가시켜주었던 x를 answer 리스트에 append 시켜주고, x는 1로 설정하여 다시 처음부터 작업의 수를 count 해 줄 수 있게 하였다. 그리고 기준이 되는 a의 값을 b로 새로 할당해주었다.

 

이 과정을 day 리스트가 빌때 까지 해준 뒤, while문을 빠져 나오면 아직 append 해주지 않은 마지막 x의 값을 answer에 append 해주었다.


[코드]

import math
def solution(progresses, speeds):
    day=[]
    for progress,speed in zip(progresses,speeds):
        day.append(math.ceil((100-progress)/speed))
    answer = []
    a=day.pop(0)
    x=1
    while(day):
        b=day.pop(0)
        if a>=b:
            x+=1
        else:
            answer.append(x)
            x=1; a=b
    answer.append(x)
    return answer

 


문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/42586

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

 

Comments