문제 설명
제한 사항
입출력 예
문제 풀이
while
문으로 모든 작업이 배포될 때 까지 반복, 여기서 while문의 반복 한번은 하루를 의미- while문 안에서
for
문을 사용하여 각 작업 현황 업데이트 - for문을 반복할 때, 작업이 완료된 기능의 경우 바로 배포가 되지 못함, 앞의 작업이 완료 되어야 배포 가능)
- 이미 배포 완료된 작업을 순서대로 기록해야, 현재 작업이 배포 가능한지 확인 가능
Stack을 사용하여 배포 완료한 작업을 기록(지금 생각해보면 그냥 int변수로 마지막에 배포한 작업만 기록해도 되지 않을까 싶음)- 마지막에 기록한 작업 다음이 자신의 차례이면 배포, 이때 배포 횟수 기록. 여기서 배포 횟수는
while
문을 돌 때마다 초기화 됨
- for문을 다 돌고 나서, 배포 횟수가 1번 이상이면 리스트에 기록
코드
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
// 배포된 횟수 기록
int[] answer = new int[progresses.length];
int idx = 0;
// 배포 완료된 작업
Stack<Integer> st = new Stack<Integer>();
st.push(-1);
// 배포 완료할때까지 반복
while(st.size() <= progresses.length){
int num = 0;
for(int i=0; i<progresses.length; i++){
// 작업 진행
progresses[i] += speeds[i];
// 작업 완료되고, 작업이 배포될 순서면 배포
if (st.peek()+1 == i && progresses[i]>=100){
st.push(i);
num++;
}
}
// 배포된 기록이 있으면 answer에 추가
if (num>0) answer[idx++] = num;
}
return Arrays.copyOf(answer, idx);
}
}
# 결과
![](https://velog.velcdn.com/images/hj3175791/post/ddeeef5f-a38b-4541-b454-bb8055c130f0/image.png)
'알고리즘' 카테고리의 다른 글
[SWEA/Java] 1210. [S/W 문제해결 기본] 2일차 - Ladder1 (0) | 2024.06.02 |
---|---|
[SWEA] 3752. 가능한 시험 점수(Java) (0) | 2024.06.02 |
[프로그래머스] 정수 삼각형(Java) (0) | 2024.06.02 |
[프로그래머스] 가장 많이 받은 선물(Java) (0) | 2024.06.02 |
[프로그래머스] 점 찍기(Python3) (0) | 2024.06.02 |