728x90
반응형
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
progress 별로 걸리는 시간을 계산한 값을 큐에 넣고
큐의 맨 앞의 값이 이전의 값(lastIdx)보다 작거나 같을 경우, 같이 빼낼 수 있기 때문에 그룹화를 위한 카운트 ++
큐의 맨 앞의 값이 이전의 값(lastIdx)보다 클 경우, lastIdx를 갱신해주고 배포를 진행한다.
큐의 길이가 0이 되면, 마지막 배포를 진행한다.
코드
import java.util.*;
class Solution {
public List<Integer> solution(int[] p, int[] s) {
int N = s.length;
Queue<Integer> q = new ArrayDeque<>();
List<Integer> list = new ArrayList<>();
// progress별 걸리는 시간 계산
for(int i = 0 ; i < N ; i ++){
int spareProgressVol = 100 - p[i];
int spareTime = spareProgressVol / s[i];
int res = spareTime;
// 나누어 떨어지지 않을경우
if(spareProgressVol % s[i] != 0) res += 1;
q.offer(res);
}
int cnt = 0;
int lastIdx = q.peek();
while(!q.isEmpty()){
// 큐의 맨 앞의 값이, 앞의 값보다 작거나 같을 경우
if(lastIdx >= q.peek()){
cnt ++;
q.poll();
}
// 클 경우
else{
list.add(cnt);
lastIdx = q.poll();
cnt = 1;
}
}
list.add(cnt);
return list;
}
}
728x90
반응형