728x90
반응형
문제 링크
programmers.co.kr/learn/courses/30/lessons/42586
* 프로그래머스 - Level2 - (자바) 기능개발 - 큐 레벨별 순회
< 로직 >
* Queue에 progress와 speed를 저장
* Queue를 Level별로 순회하며 가장 앞의 큐가 100을 넘어가는지 체크
* 가장 앞의 큐 체크는 idx를 주어 해결
* 100이 넘어가지 않는다면 다시 큐에 저장
* 위 과정 반복
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Queue<int[]>queue = new LinkedList<int[]>();
for(int i = 0; i < progresses.length; i++) { // 진행률과 개발속도를 큐에 저장
queue.offer(new int[]{progresses[i], speeds[i]});
}
List<Integer> answerList = new ArrayList<Integer>();
while(!queue.isEmpty()) { // 큐를 순회 할 것인데
int size = queue.size(); // 사이즈별로 순회
int idx = 0; // 가장 앞을 가리켜 줄 인덱스
int count = 0; // 현재 사이즈에서 나올 수 있는 카운트
for(int s = 0; s < size; s++) { // 사이즈 별 순회 시작
int[] curProgress = queue.poll(); // 현재 진행률
int nextProgress = curProgress[0] + curProgress[1]; // 다음 진행률
// 가장 앞에있는 기능이고 진행률이 100이 넘었으면
if(idx == s && nextProgress >= 100) { // 인덱스와 진행률을 함께 비교
count++; // 기능 배포
idx++; // 가장 앞 기능 순서 지정
} else { // 아직 완료 안됐으면 다시 큐로
queue.offer(new int[] {nextProgress, curProgress[1]});
}
}
// 배포가 1개라도 되었을 경우에 리스트 저장
if(count != 0) answerList.add(count);
}
// answer에 옮겨주자
int[] answer = new int[answerList.size()];
for(int i = 0; i < answer.length; i++) {
answer[i] = answerList.get(i);
}
return answer;
}
}
반응형
'문제풀이 > Programmers 문제풀이' 카테고리의 다른 글
[ 알고리즘 ] 코딩 - Programmers - 섬연결하기.java (0) | 2021.01.07 |
---|---|
[ 알고리즘 ] 코딩 - Programmers - 삼각달팽이.java (0) | 2021.01.07 |
[ 알고리즘 ] 코딩 - Programmers - 프린터.java (0) | 2020.12.26 |
[ 알고리즘 ] 코딩 - Programmers - 불량 사용자.java (0) | 2020.12.22 |
[ 알고리즘 ] 코딩 - Programmers - 예상대진표.java (0) | 2020.12.18 |