본문 바로가기
Java/알고리즘

스텍 / 큐 : 기능개발

by JuNo_12 2025. 7. 3.

문제 이해

  • 여러 기능을 동시 개발, 각각 진행도와 개발속도가 다름
  • 앞선 기능이 완료되어야 뒤 기능도 함께 배포 가능
  • 각 배포마다 몇 개의 기능이 배포되는지 구하기

핵심 아이디어

각 기능을 진행도 계산 함수로 만들어서 큐에 저장하고, 하루씩 시뮬레이션하면서 배포 가능한 기능들을 찾는다.

접근 방법

  1. 함수 생성: progress + speed * day 형태의 함수를 각 기능마다 생성
  2. 큐 활용: 순서대로 처리하기 위해 Queue 사용
  3. 시뮬레이션: 매일 front()로 체크하여 100 이상이면 pop()
  4. 배포 카운트: 연속으로 완성된 기능들을 같은 날 배포

코드

import java.util.*;
import java.util.function.Function;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        // 1. 각 기능을 함수로 만들어서 큐에 저장
        Queue<Function<Integer, Integer>> queue = new LinkedList<>();
        
        for (int i = 0; i < progresses.length; i++) {
            final int progress = progresses[i];
            final int speed = speeds[i];
            queue.offer(day -> progress + speed * day);
        }
        
        // 2. 결과 저장
        List<Integer> result = new ArrayList<>();
        int day = 1;
        
        // 3. 하루씩 증가하며 배포 체크
        while (!queue.isEmpty()) {
            int count = 0;
            
            // 연속으로 완성된 기능들 찾기
            while (!queue.isEmpty() && queue.peek().apply(day) >= 100) {
                queue.poll();
                count++;
            }
            
            if (count > 0) {
                result.add(count);
            }
            day++;
        }
        
        return result.stream().mapToInt(i -> i).toArray();
    }
}

핵심 포인트

  • Function 인터페이스: 함수를 변수처럼 저장 가능
  • final 키워드: 람다식에서 지역변수 사용 시 필요
  • 시뮬레이션: 실제 개발 과정과 유사하게 날짜별로 체크
  • 큐의 특성: FIFO로 순서대로 배포 처리

시간복잡도

O(N × D) - N은 기능 수, D는 최대 완성일

'Java > 알고리즘' 카테고리의 다른 글

스텍 / 큐 : 올바른 괄호  (1) 2025.07.07
스텍 / 큐 : 같은 숫자는 싫어  (0) 2025.07.07
스텍 / 큐 : 프로세스  (1) 2025.07.03
스텍 / 큐 : 다리를 지나는 트럭  (1) 2025.07.03
스텍 / 큐 : 주식가격  (0) 2025.07.03