[프로그래머스] Level2_기능개발

이강희·2021년 9월 3일
1

프로그래머스

목록 보기
13/15
post-thumbnail

기능개발

문제설명

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

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

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

제한사항

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

해당 문제에 스택을 사용하려 했으나 이미 파이썬의 리스트 자체가 스택의 기능을 구현하고 있었다.
따라서 리스트를 사용하였다.

이번 문제는 일단 각 작업이 완료되는 데에 얼마나 걸리는 지를 파악하고 시작하였다.

while progresses[i] < 100:
            progresses[i] += speeds[i]
            count += 1
        count_stack.append(count)

위와 같이 몇일이 걸리는 지 나타내는 count_stack에 각 작업이 몇일이 걸리는 지 파악하여 넣어주고
progress라는 변수에 작업이 걸리는 데에 가장 오랜시간이 걸리는 작업 일수를 넣는다.

이 후 count_stack을 돌며 progress이하라면 count를 1씩 늘리고
그렇지 않을 경우 count를 1로 초기화 시키고 같은 과정을 반복한다.
이렇게 될 경우 마지막의 count가 추가되지 않는 경우가 생겨
for문 밖에 추가하는 코드를 한 줄 더 작성하였다.

시간 초과가 발생하지는 않았으나 for문 안에 중첩으로 while문을 사용하여 시간은 좀 걸렸던 것 같다.

코드

def solution(progresses, speeds):
    answer = []
    count_stack = []
    count = 0
    for i in range(0, len(progresses)):
        count = 0
        while progresses[i] < 100:
            progresses[i] += speeds[i]
            count += 1
        count_stack.append(count)
    print(count_stack)
    progress = count_stack[0]
    count = 1
    for i in range(1, len(count_stack)):
        if count_stack[i] <= progress:
            count += 1
        else:
            answer.append(count)
            progress = count_stack[i]
            count = 1 
    answer.append(count)        
            
    return answer
profile
Dongguk Univ. Computer Science Engieneering👋

0개의 댓글