CodingTEST
[프로그래머스] 기능개발 (JAVA)
경걍
2024. 1. 28. 00:01
반응형
프로그래머스 - [Level 2] 기능개발
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 분석
- 각 기능별로 작업 진도와 속도가 주어진다
- 앞에 기능이 배포되야지만, 뒤에 기능을 배포 시킬 수 있다.
- 이때, 각 배포마다 몇 개의 기능이 배포되는지 리스트로 만들어 리턴해라.
해결 키 포인트
- 해시 맵 사용
- key : index | value : 작업 진도
- 완성되지 않은 최상단 작업의 인덱스를 변수로 제작
- 최상단 작업의 완성도가 100인 경우, 해당 작업과 그 뒤에 이어진 기능의 작업 진도가 100을 안넘을 때까지 반복
- 마지막 작업까지 다 끝날때까지 현재 index부터 끝까지 작업 진도를 속도만큼 증가
- 이 외에도 스택/큐 사용 가능
- 모두 큐에 삽입
- 맨 앞이 작업진도가 100이 안넘으면 속도 증가시키기 (큐에 들어있는 개수만큼)
- 100이 넘을 시, 큐에서 100이 넘지 않는 것이 맨 앞이 될 때까지 제거
코드
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
ArrayList<Integer> result = new ArrayList<>();
HashMap<Integer, Integer> check = new HashMap<>();
for (int i = 0; i < progresses.length; i++) {
check.put(i, progresses[i]);
}
int index = 0;
while(index < progresses.length) {
if(check.get(index) >= 100) {
int count = 0;
for (int i = index; i < progresses.length; i++) {
int value = check.get(i);
if(value >= 100) {
count++;
}
else
break;
}
result.add(count);
index = index+count;
}
for (int i = index; i < progresses.length; i++) {
check.put(i, check.get(i) + speeds[i]);
}
}
int [] answer = new int[result.size()];
for (int i = 0; i < result.size(); i++) {
answer[i] = result.get(i);
}
return answer;
}
}
반응형