조앤의 기술블로그

[프로그래머스 / 스택&큐] 프린터 (java) 본문

Programming/프로그래머스

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

쬬앤 2020. 3. 25. 15:58

[1차 코드 - 실패]

import java.util.*;
class Solution {
    static class Node {
        int index;
        int value;
        
        public Node(int index, int value){
            this.index = index;
            this.value = value;
        }
    }
    public int solution(int[] priorities, int location) {
        int answer = 0;
        Queue<Node> pq = new LinkedList<Node>();
        int[] printing = new int[priorities.length];
        
        for(int i = 0; i < priorities.length; i++){
            pq.add(new Node(i, priorities[i]));
        }
        int k = 0;
        while(!pq.isEmpty()){
            Node now = pq.poll();
            for(Node n : pq){
                if(now.value < n.value){
                    pq.add(now);
                    break;
                }
                else{
                    printing[k++] = now.index;
                    break;
                }
            }
        }
        for(int i = 0; i < priorities.length; i++){
            if(location == printing[i])
                answer = i;
        }
        
        return answer;
    }
}

기본 테스트 케이스는 두개 다 통과하였으나, 채점 테스트 케이스는 1개만 통과함..ㅎ

뭐가 문제일까 -> 비교하는 포문이 계속 돌아야 하는데 break때문에 뒤에 값이랑밖에 비교 못함 바부~~!

 

[2차코드 - 성공]

flag 쓰기 싫었는데... 다른 방법이 생각나지 않아서 썼다..

import java.util.*;
class Solution {
    static class Node {
        int index;
        int value;
        
        public Node(int index, int value){
            this.index = index;
            this.value = value;
        }
    }
    public int solution(int[] priorities, int location) {
        int answer = 0;
        Queue<Node> pq = new LinkedList<Node>();
        int[] printing = new int[priorities.length];
        
        for(int i = 0; i < priorities.length; i++){
            pq.add(new Node(i, priorities[i]));
        }
        int flag = 1;
        int k = 0;
        while(!pq.isEmpty()){
            flag = 1;
            Node now = pq.poll();
            for(Node n : pq){
                if(now.value < n.value){
                    pq.add(now);
                    flag = 0;
                    break;
                }
            }
            if(flag == 0)
                continue;
            else
                printing[k++] = now.index;
        }
        for(int i = 0; i < priorities.length; i++){
            if(location == printing[i])
                answer = i + 1;
        }
        
        return answer;
    }
}

 

flag 쓰지 않고 코드를 작성하는 방법을 생각해보자!!!

다른 사람들의 코드를 보는중.. 대단한 사람들이 많다 ...