오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-09 15:52
관리 메뉴

우노

[Queue] 프로그래머스 “기능개발” Python 풀이 본문

Algorithm/Stack, Queue

[Queue] 프로그래머스 “기능개발” Python 풀이

운호(Noah) 2022. 10. 24. 23:17

문제 링크

풀이

  • 작업이 끝나기까지 남은 일수를 모두 큐에 넣은 뒤,
  • 큐에서 요소들을 하나씩 빼며, 현재 요소가 이전에 뺏던 요소들 중에 가장 큰 값인지 확인합니다.
  • 가장 큰 값이라면 새로운 배포 일정을 추가합니다.
  • 가장 큰 값이 아니라면 마지막 배포 일정에 현재 기능의 개수를 추가합니다.
  • 따라서, 큐가 [5, 10, 1, 1, 20, 1]로 이루어져있다면 결과로 [1, 3, 2]가 됩니다.
  • 예외 케이스로, progresses [95, 94]와 speeds [3, 3]가 있습니다.

코드

from collections import deque

def solution(progresses, speeds):

    # 결과 리스트
    result = []

    # 큐 생성
    q = deque()

    # 작업이 끝나기까지 남은 일수 계산
    for i in range(len(progresses)):

        # 남은 작업 진도
        remain_task = 100 - progresses[i]

        # 작업 진도가 작업 속도와 딱 떨어진다면
        if (remain_task % speeds[i] == 0):
            # 작업이 끝나기까지 남은 일수
            remain_day = remain_task // speeds[i]

        # 아니라면
        else:
            # 작업이 끝나기까지 남은 일수
            remain_day = (remain_task // speeds[i]) + 1    

        # 작업이 끝나기까지 남은 일수를 큐에 추가
        q.append(remain_day)

    # 최댓값
    max_value = -int(1e9)

    # 큐가 빌때까지
    while q:

        # 큐에서 요소 추출
        now = q.popleft()

        # 현재 요소가 이전에 뺏던 요소들 중에 가장 큰 값이라면
        if (max_value < now):
            # 최대값 변경
            max_value = now
            # 새로운 배포 일정을 추가합니다.
            result.append(1)

        # 마지막 배포 일정에 기능의 개수를 추가합니다.
        else:
            result[-1] += 1

    return result
Comments