[프로그래머스] (스택/큐) 프린터

하도 막혀서 어떻게든 복잡하게라도 풀어내고 빨리 다른사람 풀이를 보고 싶었던 문제..

결국 스택과 큐는 사용하지 않았다.

 

문서의 인덱스와 문서를 조건에 따라 재배치하고 문서의 인덱스를 저장하는 배열에 따로 최종본을 저장하고

그 배열에서 조회할 문서를 다시 찾아온다.

 

import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        List<Integer> docIdx = new ArrayList<>();
        List<Integer> doc = new ArrayList<>();
        List<Integer> reIdxDoc = new ArrayList<>();

        for (int i = 0; i < priorities.length; i++) {
            int priority = priorities[i];
            doc.add(priority);
            docIdx.add(i);
        }

        while(!doc.isEmpty()) {
            int nowPrior = doc.get(0);
            int nowIdx = docIdx.get(0);
            boolean isDelay = false;
            for (Object nextPrior : doc) {
                if ((int)nextPrior > nowPrior) {
                    isDelay = true;
                    break;
                }
            }
            if (isDelay) {
                doc.add(nowPrior);
                docIdx.add(nowIdx);
            } else {
                reIdxDoc.add(nowIdx);
            }
            doc.remove(0);
            docIdx.remove(0);
        }

        for (int i = 0; i < reIdxDoc.size(); i++) {
            if(reIdxDoc.get(i) == location) {
                answer = i+1;
            }
        }
        return answer;
    }
}


+ 가장 많은 좋아요를 받은 사람의 풀이

천천히 뜯어봐야겠음.

import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        int l = location;

        Queue<Integer> que = new LinkedList<Integer>();
        for(int i : priorities){
            que.add(i);
        }

        Arrays.sort(priorities);
        int size = priorities.length-1;



        while(!que.isEmpty()){
            Integer i = que.poll();
            if(i == priorities[size - answer]){
                answer++;
                l--;
                if(l <0)
                    break;
            }else{
                que.add(i);
                l--;
                if(l<0)
                    l=que.size()-1;
            }
        }

        return answer;
    }
}

 

출처: 프로그래머스 코딩 테스트 연습, 
https://programmers.co.kr/learn/challenges