새소식

알고리즘 문제풀이/프로그래머스

[프로그래머스(Programmers)] level2 프린터 큐 문제 자바 풀이

  • -

이번에는 프로그래머스 코딩테스트 연습에 있는

level2로 분류되어 있는 프린터 문제를 풀어보겠습니다!!

이 문제는 Queue를 이용해서 풀 수 있어요

 

코드와 자세한 풀이는 깃허브에서도 보실 수 있어요!!

https://github.com/wlgh325/Programmers_algorithm/tree/master/Level2/%ED%94%84%EB%A6%B0%ED%84%B0

 

wlgh325/Programmers_algorithm

프로그래머스 알고리즘 자바 풀이. Contribute to wlgh325/Programmers_algorithm development by creating an account on GitHub.

github.com

 

 

우선 프린터 순서를 담을 배열과 인쇄 대기목록을 관리할 queue를 생성했어요

그래서 입력으로 들어온 대기목록을 queue에 넣고 하나씩 빼는 방식으로 했습니다

이때 큐는 프린터의 인덱스와 우선순위를 담은 Print 객체를 가지도록 했어요

 

하나씩 꺼내면서 check 함수를 통해 대기목록에 더 큰 수가 있는지 비교하였어요

그래서 더 큰 수가 있다면 다시 queue의 뒤에 넣고 그렇지 않으면 pop해서 프린터 순서 목록에 추가합니다

이렇게 하면 프린터 순서를 쉽게 결정할 수 있습니다!!

프로그래머스 프린터 문제 자바 풀이 코드는 아래와 같습니다!!

 

import java.util.Queue;
import java.util.LinkedList;

class Print{
    int priority;
    int index;

    Print(int priority, int index){
        this.priority = priority;
        this.index = index;
    }
}

class Solution{
    
    static Queue<Print> queue;
    public int solution(int[] priorities, int location) {
        int[] order = new int[priorities.length];
        queue = new LinkedList<>();
        int answer = 0;

        // queue에 넣기
        for (int i = 0; i < priorities.length; i++) {
            Print print = new Print(priorities[i], i);
            queue.offer(print);
        }

        int j=0;
        while(!queue.isEmpty()){
            Print print = queue.poll();
            int priority = print.priority;

            // 큰 수가 있나 찾아보기
            if(check(priority))
                queue.offer(print);
            else{
                order[j] = print.index;
                j++;
            }
        }
        
        for (int i = 0; i < order.length; i++) {
            if(order[i] == location){
                answer = i + 1;
                break;
            }
                
        }
        return answer;
    }

    public static boolean check(int num){
        boolean flag = false;

        // list를 array로 변환
        Print[] list = queue.toArray(new Print[queue.size()]);
        
        for (int i = 0; i < list.length; i++) {
            if(list[i].priority > num){
                flag = true;
                break;
            }
        }
        return flag;
    }
}

 

여기서 중요한 것은 queue를 사용한다는 생각(물론 queue를 안쓰고 arraylist를 써도 가능)과

list를 array로 변환하는 부분이라고 생각해요

queue에서 인덱스를 참조하며 비교하려고 했는데 그 부분이 없더라구요

그래서 list로 변환해서 참조하도록 하였어요

 

아니면 똑 같은 queue를 복사해두고 할 수 도 있는데 그게 그거일 것 같다고 생각했어요

 

아니면 애초에 처음부터 arraylist를 사용해서 풀어도 괜찮을것 같아요!!

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.