본문 바로가기
알고리즘/프로그래머스

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

by 오이가지아빠 2021. 3. 23.

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

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

 

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

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

 

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
반응형

댓글