[JAVA 문제 풀이] 306. 기능개발

프로그래머스 (42586)
Stupefyee's avatar
Jun 09, 2025
[JAVA 문제 풀이] 306. 기능개발
notion image
 

내가 작성한 코드

import java.util.*; class Solution { public int[] solution(int[] progresses, int[] speeds) { Queue<Integer> numberOfDays = new LinkedList<>(); // 각 기능이 완성되기까지 걸리는 일 수를 저장하는 큐 List<Integer> answerList = new ArrayList<>(); // 기능별 배포 개수를 저장할 리스트 int count = 1; // 현재 배포할 기능의 개수를 세는 변수 // 각 기능 완성까지 걸리는 일 수 계산 후 큐에 저장 // Math.ceil()을 사용하여 올림 처리 for (int i = 0; i < progresses.length; i++) { int days = (int) Math.ceil((100.0 - progresses[i]) / speeds[i]); numberOfDays.offer(days); } // poll() >> 큐의 맨 앞에 있는 값을 꺼내면서 제거 int currentDays = numberOfDays.poll(); // 현재 배포까지 걸린 일 수 while (!numberOfDays.isEmpty()) { int nextDays = numberOfDays.poll(); // 다음 기능이 완성되기까지 걸리는 일 수 if (currentDays >= nextDays) { // 현재 기능이 다음 기능보다 완성되는 날이 같거나 더 늦다면 count++; } else { // 현재 기능이 다음 기능보다 먼저 완성된다면 answerList.add(count); currentDays = nextDays; count = 1; } } answerList.add(count); return answerList.stream().mapToInt(Integer::intValue).toArray(); } }
 

다른 사람의 코드

import java.util.*; // 진행도를 계산하여 처리하는 방식식 class Solution { public int[] solution(int[] progresses, int[] speeds) { int[] dayOfend = new int[100]; // 걸린 일 수 카운트용 배열 int day = 0; // 현재 진행 중인 작업의 일 수 for (int i = 0; i < progresses.length; i++) { // 진행도 계산 >> 지난일 수 * 속도 + 현재 진행도 >= 100이 될 때까지 while (progresses[i] + (day * speeds[i]) < 100) { day++; } dayOfend[day]++; } return Arrays.stream(dayOfend).filter(i -> i != 0).toArray(); } }
 
Share article

stupefyee