알고리즘/알고리즘 풀이

프로그래머스_기능개발 JAVA

데부한 2025. 2. 6. 20:50
반응형

 

프로그래머스

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

programmers.co.kr

 

원래 3차원 어쩌구 문제가 있었는데 프로그래머스 안에서 검색해보니 나오질 않아서 최신 문제들로 다시 추천해달라고 했다.

그래서 오늘 풀 문제는 '기능개발'이다.

 

이번 문제는 처음 풀어보는 문제였다. 그래서 과거 코드는 없다.

문제를 읽었을 땐 문제에서 뭔가 강조하는 것 같았던 '작업 일수'는 별로 신경 안 써도 될 거 같았는데..

아니 문제를 풀다보니깐 '작업 일수'가 되게 중요한 거였다..!

역시 문제에 나오는 내용은 허튼 것이 없다.

 

코드

import java.util.*;

class Solution {
    public List<Integer> solution(int[] progresses, int[] speeds) {
        List<Integer> answer = new ArrayList<>();
        int success = 100;
        Deque<Integer> deque = new ArrayDeque<>();
        
        // 작업 종료일 구해서 deque에 넣기
        for(int i = 0; i < progresses.length; i++) {
            int progress = progresses[i];
            int speed = speeds[i];
            
            int endDate = (int)Math.ceil((double)(success - progress) / (double)speed);
            deque.offer(endDate);
        }
        
        int prevEndDate = deque.poll();
        int doneTaskCnt = 1;
        while(!deque.isEmpty())
        {
            if(prevEndDate >= deque.peek()) {
                deque.poll();
                doneTaskCnt++;
            } else {
                answer.add(doneTaskCnt);
                prevEndDate = deque.poll();
                doneTaskCnt = 1;
            }
            
            if(deque.isEmpty()) {
                answer.add(doneTaskCnt);
            }
        }
        return answer;
    }
}

 

짧게 설명해보자면 작업일수를 먼저 구해서 deque에 넣고 (기준 일수가 됨)

현재 작업일수보다 다음 작업 일수가 같거나 작으면 같이 배포되니까 ++ 해주고 아니면 

배포 된 기능 수를 answer 리스트에 넣고 작업일수 기준을 업데이트해줬다.

 

근무지 점심시간에 풀은거라 보안 상 캡처가 안돼서;;

3점을 맞았는데 캡쳐본이 안올라간다.

 

오늘도 즐거운 코딩!!!

반응형