import java.util.ArrayList;
class Solution {
public int solution(int[] priorities, int location) {
int ans = 0;
int J = 0;
ArrayList<Integer> list = new ArrayList<>();
for(int i : priorities ) list.add(i);
for(int i=0; i<5050; i++){
J = list.get(0);
list.remove(0);
int jmax = J;
for(int j=0; j<list.size(); j++){
jmax = Math.max(jmax,list.get(j));
if(J < list.get(j)) {
if(location !=0) location--;
else if(location ==0) location = list.size();
list.add(J);
break;
}
}
if( jmax == J && location !=0){
location--;
ans++;
}else if( jmax == J && location ==0){
ans++;
break;
}
}
return ans;
}
}
두번째 for문에서 최악의 반복횟수를 생각하여 100!(팩토리얼)인 5050번 반복해준다.
J(문서)를 꺼낸 뒤 리스트에서 삭제해준다.
가장높은 우선순위를 jmax에 넣어주고 반복문이 끝났을 때 J와 비교해준다.
break문을 적절히 사용하여 최대반복 횟수인 5050을 채우지 않고 효율적인 속도를 낼 수 있다.
입출력 예 2번을 보면 location 0에 있는 1이 인쇄되는 순서를 찾아야 하는데 문제는 대기목록에 1이 중복되어 있기 때문에 두개의 if조건문을 사용하여 걸러준다.
if( jmax == J && location !=0){
location--;
ans++;
}else if( jmax == J && location ==0){
ans++;
break;