[프로그래머스] 기능개발 (시뮬레이션)

2025. 5. 16. 20:51·Algorithm/Coding Test Records

문제 소개

오늘 풀었던 프로그래머스 - 기능개발 문제를 정리합니다.

이 문제는 여러 작업의 진도(progresses)와 개발 속도(speeds)가 주어졌을 때,
각 작업이 몇 일 후 완료되는지 계산하고, 앞 작업이 끝날 때 함께 배포될 수 있는 뒤 작업들을 묶어서, 각 배포마다 몇 개의 기능이 배포되는지를 구하는 문제입니다.

문제 링크: 기능개발 - 프로그래머스


문제 접근 방식

이 문제는 다음과 같은 방식으로 접근했습니다:

  1. 각 작업이 완료되는 날짜를 계산한다
    → (100 - progresses[i] + speeds[i] - 1) / speeds[i]
  2. 순서대로 작업을 확인하면서,
    • 가장 앞의 작업보다 늦게 끝나는 작업이 나오면 배포 단위 마감
    • 같은 날 또는 더 빨리 끝나는 작업들은 같은 배포 묶음으로 처리
  3. 각 배포마다 포함된 기능 수를 카운트해서 리스트로 반환한다

해결 과정 및 코드

핵심 아이디어

  1. 각 작업의 완료 날짜를 기준으로 앞 작업이 끝날 때 함께 배포 가능한 뒷 작업까지 묶는다
  2. dayOfend[] 배열을 활용해 날짜별 배포 수를 카운트 (최대 길이 100으로 제한)

코드

시간 복잡도 : O(N)

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] dayOfend = new int[100];
        int day = -1;

        for (int i = 0; i < progresses.length; i++) {
            while (progresses[i] + (day * speeds[i]) < 100) {
                day++;
            }
            dayOfend[day]++;
        }

        return Arrays.stream(dayOfend).filter(i -> i != 0).toArray();
    }
}

 


Queue로 해결할 경우 

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        ArrayDeque<Integer> queue = new ArrayDeque<>();
        
        // Step 1: 각 작업의 완료일 계산
        for (int i = 0; i < progresses.length; i++) {
            int remain = 100 - progresses[i];
            int days = (remain + speeds[i] - 1) / speeds[i]; // 올림 처리
            queue.offer(days);
        }

        List<Integer> result = new ArrayList<>();
        
        // Step 2: 배포일 확인
        while (!queue.isEmpty()) {
            int current = queue.poll();
            int count = 1;
            
            // 뒤에 있는 작업들이 앞 작업과 같이 배포될 수 있는지 확인
            while (!queue.isEmpty() && queue.peek() <= current) {
                queue.poll();
                count++;
            }
            result.add(count);
        }

        // 결과 변환
        return result.stream().mapToInt(Integer::intValue).toArray();
    }
}

'Algorithm > Coding Test Records' 카테고리의 다른 글

[프로그래머스] 프로세스 (Queue)  (1) 2025.05.18
[프로그래머스] 올바른 괄호 (시뮬레이션)  (0) 2025.05.17
[프로그래머스] 같은 숫자는 싫어 (Stack)  (0) 2025.05.15
[프로그래머스] 베스트앨범 (Hash)  (1) 2025.05.14
[프로그래머스] 의상 (Hash)  (0) 2025.05.13
'Algorithm/Coding Test Records' 카테고리의 다른 글
  • [프로그래머스] 프로세스 (Queue)
  • [프로그래머스] 올바른 괄호 (시뮬레이션)
  • [프로그래머스] 같은 숫자는 싫어 (Stack)
  • [프로그래머스] 베스트앨범 (Hash)
Celion
Celion
오늘도 평소처럼 화이팅!
  • Celion
    Orion Log
    Celion
  • 전체
    오늘
    어제
    • 전체 글 (144)
      • Uncompiled Thoughts (8)
        • 네이버 부스트캠프 10기 (5)
      • CS 기초부터 한 걸음씩 (34)
      • Code Odyssey (22)
      • Algorithm (77)
        • Coding Test Records (63)
      • Git (3)
      • reference (0)
  • 블로그 메뉴

    • 태그
    • 방명록
  • 태그

    Kotlin
    문법정리
    greedy
    java
    코테
    시뮬레이션
    백준
    Level3
    알고리즘고득점kit
    boostcamp
    프로그래머스
    Level2
  • 최근 글

  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
Celion
[프로그래머스] 기능개발 (시뮬레이션)
상단으로

티스토리툴바