배열과 큐를 이용해서 해결 하였다.
변수 설명
- head ==> 탐색을 시작할 위치(처음에는 head 변수 없이 이미 배포가 된 작업에 대해서도 체크를 해줘서 시간 초과가 발생하였다.)
- tail ==> progresses 배열의 크기
- 큐 ans ==> 배포된 갯수를 차례대로 삽입, poll() 함수를 이용하여 answer 배열에 복사
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] answer = {};
Queue<Integer> ans = new LinkedList<>();
int head=0;
int tail=progresses.length;
while(head<tail){
for(int i=head; i<tail; i++){
progresses[i]+=speeds[i];
}
int count = 0;
while (head < tail && progresses[head] >= 100) { //head부터 개발이 끝난 작업이 있는지 체크
count++;
head++; // head 업데이트
}
if(count>0){
ans.add(count); // 한번에 배포된 작업 개수를 큐에 삽입
}
}
answer=new int[ans.size()];
for(int i=0; i<answer.length; i++){
answer[i]=ans.poll(); //answer배열에 결과를 넣어준다.
}
return answer;
}
}
고민 했던 부분
answer=new int[ans.size()];
for(int i=0; i<answer.length; i++){
answer[i]=ans.poll();
}
이 부분은 결과를 answer배열에 삽입해주는 부분이다.
처음에는 아래와 같이 i를 ans.size()까지로 제한 했더니 결과가 몇개 빠져서 출력되었다.
이 처럼 i<ans.size()로 반복문을 실행하면 poll()함수가 호출 될때마다 반복문 횟수가 줄어든다.
따라서 반복문의 횟수를 설정할때 answer.length로 해줘야 poll()함수 호출 횟수에 관련없이 answer배열에 정상적으로 삽입이된다.
answer=new int[ans.size()];
for(int i=0; i<ans.size(); i++){
answer[i]=ans.poll();
}
2025-03-02 다시 풀었을때 풀이
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int head = 0;
Queue<Integer> queue = new LinkedList<>();
while(head<progresses.length){
for(int i=head; i<progresses.length; i++){
progresses[i] = progresses[i] + speeds[i];
}
if(progresses[head]>=100){ //배포 작업
int count = 0;
while(true){
count+=1;
head+=1;
if(head>progresses.length-1){ //head가 progresses배열을 넘어가는 경우
head=1000; //다음 while문이 실행되지 않도록 함
break;
}
if(progresses[head]<100){ //더이상 배포할것이 없는 경우
break;
}
}
queue.add(count);
}
}
int[] answer = new int[queue.size()];
int i=0;
while(!queue.isEmpty()){
answer[i] = queue.poll();
i++;
}
return answer;
}
}
'알고리즘 > 스택 큐' 카테고리의 다른 글
프로그래머스 - 프로세스(Java) (0) | 2025.01.02 |
---|---|
프로그래머스 - 올바른 괄호(Java) (0) | 2025.01.02 |
프로그래머스 - 같은 숫자는 싫어(Java) (1) | 2024.12.31 |
백준 10845번 - 큐 (2) | 2024.12.31 |
백준 10828번 스택 (0) | 2024.12.30 |