Coding Test/Programmers
[Java][Programmers] 기능개발
예롱메롱
2025. 3. 17. 17:36
728x90
반응형
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📌 접근 방식
✅ 문제 핵심 이해
- 각 기능은 100%가 되어야 배포 가능.
- 앞에 있는 기능이 완성되지 않으면, 뒤에 있는 기능이 먼저 완료되어도 함께 대기.
- 매일 배포할 수 있고, 같은 날 완료된 기능은 함께 배포.
- 각 기능별 남은 작업 일수 계산
- (100 - 현재 진도) / 개발 속도 로 구하되, 나머지가 있으면 +1일 더 필요.
- 이 값을 리스트 tmp에 저장.
- 배포 조건에 따라 그룹핑
- map에 key를 "배포 시점", value를 "해당 시점에 함께 배포되는 기능 수"로 저장.
- 이전 기능의 배포일보다 더 빠르게 끝나는 기능이 있어도, 앞 기능이 끝날 때까지 기다려야 하므로, 현재 기능의 배포일 = max(직전 기능 배포일, 현재 기능 예상 완료일)로 업데이트.
- 결과 추출
- 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
반응형