Coding Test/Programmers

[Java][Programmers] 기능개발

예롱메롱 2025. 3. 17. 17:36
728x90
반응형
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


📌 접근 방식

문제 핵심 이해

  • 각 기능은 100%가 되어야 배포 가능.
  • 앞에 있는 기능이 완성되지 않으면, 뒤에 있는 기능이 먼저 완료되어도 함께 대기.
  • 매일 배포할 수 있고, 같은 날 완료된 기능은 함께 배포.
  1. 각 기능별 남은 작업 일수 계산
    • (100 - 현재 진도) / 개발 속도 로 구하되, 나머지가 있으면 +1일 더 필요.
    • 이 값을 리스트 tmp에 저장.
  2. 배포 조건에 따라 그룹핑
    • map에 key를 "배포 시점", value를 "해당 시점에 함께 배포되는 기능 수"로 저장.
    • 이전 기능의 배포일보다 더 빠르게 끝나는 기능이 있어도, 앞 기능이 끝날 때까지 기다려야 하므로, 현재 기능의 배포일 = max(직전 기능 배포일, 현재 기능 예상 완료일)로 업데이트.
  3. 결과 추출
    • map의 값들(= 배포마다 몇 개의 기능이 포함되는지)을 배열로 변환해 반환.

PASS CODE

import java.util.*;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] answer = {0};
        Map<Integer, Integer> map = new LinkedHashMap<>();
        List<Integer> tmp = new ArrayList<>();
        for(int i=0; i<progresses.length; i++) {
            int days = 0;
            if((100 - progresses[i])%speeds[i] == 0) {
                days = (100 - progresses[i])/speeds[i];

            } else {
                days = (100 - progresses[i])/speeds[i] + 1;

            }
        
            if(!map.isEmpty() && tmp.get(tmp.size()-1) > days) {
                days = tmp.get(tmp.size()-1);
            }   
            tmp.add(days);
            map.put(days, map.getOrDefault(days, 0) + 1);
        }
        List<Integer> ansTmp = new ArrayList<>();
        for(Integer value : map.values()) {
            ansTmp.add(value);
        }
        answer = ansTmp.stream().mapToInt(i->i).toArray();
        return answer;
    }
}



728x90
반응형