프로그래머스 - 기능개발 [스택/큐]

2026. 1. 20. 21:35·코테

문제 설명:

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

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

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


문제 예시:

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]

 

입출력 예 #1

첫 번째 기능은 93% 완료되어 있고 하루에 1%씩 작업이 가능하므로 7일간 작업 후 배포가 가능합니다.
두 번째 기능은 30%가 완료되어 있고 하루에 30%씩 작업이 가능하므로 3일간 작업 후 배포가 가능합니다. 하지만 이전 첫 번째 기능이 아직 완성된 상태가 아니기 때문에 첫 번째 기능이 배포되는 7일째 배포됩니다.
세 번째 기능은 55%가 완료되어 있고 하루에 5%씩 작업이 가능하므로 9일간 작업 후 배포가 가능합니다.

따라서 7일째에 2개의 기능, 9일째에 1개의 기능이 배포됩니다.


문제 코드:

def solution(progresses, speeds):
    answer = []
    
    while progresses:
        for idx in range(len(progresses)):
            progresses[idx] += speeds[idx]
        count = 0
        
        while progresses[0] >= 100:
            progresses.pop(0)
            speeds.pop(0)
            count += 1
            
            if len(progresses) == 0:
                break
        
        if count != 0:
            answer.append(count)
    
    return answer

이전에 봤던 list.pop(0)을 사용하여 큐 형태를 구현했으며 앞의 일이 먼저 끝나지 않는 이상 뒤의 일들이 끝나지 않음은 큐를 떠올리기 어렵지 않았을 것입니다. 간단한 구현 문제로 쉽게 풀었습니다. 다른 사람의 풀이를 보며 최적화할 부분을 찾아보면...

def solution(progresses, speeds):
    Q=[]
    for p, s in zip(progresses, speeds):
        if len(Q)==0 or Q[-1][0]<-((p-100)//s):
            Q.append([-((p-100)//s),1])
        else:
            Q[-1][1]+=1
    return [q[1] for q in Q]

가장 먼저 보이는 풀이방법이다.

zip으로 여러 개의 list를 묶었다 이는 괜찮은 방법인 이유가 서로 idx가 같으며 len도 같기 때문이다.

이후 if문으로 필요한 작업 일수를 구하여 배포 그룹을 만든다.

즉, 만약에 배포 그룹 Q가 비어있고 일의 남은 일수를 구했을 때 바로 끝나지 않으면 append 한다.

이후, else에서는 현재 기능이 이전 기능보다 빨리 끝나거나 같으면 기능 개수를 증가 시킨다.

 

그렇게 증가된 Q리스트를 Comprehension으로 불러들여 list 형태로 가져온다

마지막 Q는 다음과 같을 것이다

  index 0 index 1
index 0 7 2
index 1 9 1

<입출력 예시 1 기준>


따라서 Comprehension으로 각각의 list에서 1번째 index를 가져오면 [2, 1]로 결괏값이 나온다.

'코테' 카테고리의 다른 글

프로그래머스 - 의상 [해시]  (1) 2026.01.25
프로그래머스 - 튜플 [2019 카카오 개발자 겨울 인턴십]  (1) 2026.01.21
프로그래머스 - 스킬트리 [Summer/Winter Coding(~2018)]  (0) 2026.01.19
프로그래머스 - 올바른 괄호 [스택/큐]  (1) 2026.01.19
프로그래머스 - 영어 끝말잇기 [Summer/Winter Coding(~2018)  (0) 2026.01.18
'코테' 카테고리의 다른 글
  • 프로그래머스 - 의상 [해시]
  • 프로그래머스 - 튜플 [2019 카카오 개발자 겨울 인턴십]
  • 프로그래머스 - 스킬트리 [Summer/Winter Coding(~2018)]
  • 프로그래머스 - 올바른 괄호 [스택/큐]
junsky00
junsky00
대기만성?
  • junsky00
    편안한 마음으로 꽃 구경하기
    junsky00
  • 전체
    오늘
    어제
    • 분류 전체보기 (26)
      • 코테 (21)
      • IT 뉴스 (4)
      • SKALA (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    LLM 잘 쓰기
    프로그래머스
    코딩 테스트
    SK AX
    DP
    PAPER
    AI
    Google Paper
    Python
    구현
    동적 프로그래밍
    AI agent
    스택
    탐색
    카카오
    BFS
    코테
    큐
    보고서 생성
    파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
junsky00
프로그래머스 - 기능개발 [스택/큐]
상단으로

티스토리툴바