Q. 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.

또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.

먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.

 

제한 사항

  • 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.
  • 작업 진도는 100 미만의 자연수입니다.
  • 작업 속도는 100 이하의 자연수입니다.
  • 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.

입출력 예

progresses     /        speeds               /         return

[93, 30, 55] [1, 30, 5] [2, 1]
[95, 90, 99, 99, 80, 99] [1, 1, 1, 1, 1, 1] [1, 3, 2]

 

 

def solution(progresses, speeds):
    n = len(progresses) 
    day = [0]*n
    for i in range(n):
        day[i] = (100 - progresses[i]) // speeds[i]
        if (100 - progresses[i]) % speeds[i] !=0:
            day[i] += 1 
       
    stack = []
    answer = []
    stack.append(day.pop(0))
    while day:
        current = day.pop(0)
        if stack[0] >= current:
            stack.append(current)
        else:
            answer.append(len(stack))
            stack = [current]

        if not day:
            answer.append(len(stack))
            
    return answer

한 progress가 완성될 때 까지 걸리는 시간을 (100 - progress) // speeds로 계산하여 day 리스트에 추가한다. 만약 일수를 계산했을 때 나머지가 나온다면 하루를 더 연장시켜야하기 때문에 +1을 계산해준다.

 

예를 들어, 1번 테스트 케이스라고 가정해보자.

 

progresses = [93, 30, 55]

speeds = [1, 30, 5]

day = [7, 2, 9]

 

스택에 가장 day[0]을 추가한다.

그리고 그 다음 날 current = day[1]과 day[0]을 비교해서 day[1]이 작다면 배포를 기다려야 하기 때문에 stack에 추가.

아니라면 둘이 같이 배포할 수 있기 때문에 len(stack)를 정답에 넣어주고, 스택에 다음날과 비교해야할 current = day[1] 값을 넣어준다.

 

만약 day가 비어있다면 바로 스택의 길이만 출력!

 

 

 

스택/큐 문제는 아직도 익숙하지 않아 다른 사람의 풀이를 참고해서(거의 배꼈다) 공부했다. 이제 약간 어떤식으로 스택을 사용해야할지 알듯말듯... 우선 스택에 들어가있는 요소들과 비교할 변수가 추가로 더 필요하다는 것!

리스트에 append, remove 하는 것도 결국 스택인데 저건 쉽고 스택은 어려운게 참..,,

'Algorithm' 카테고리의 다른 글

programmers #소수찾기  (0) 2021.08.10
programmers #다리를 지나는 트럭  (0) 2021.08.08
programmers #시저암호  (0) 2021.08.07
programmers #체육복(정답아님)  (0) 2021.08.07
programmers #예산  (0) 2021.08.07

+ Recent posts