📝 문제

https://programmers.co.kr/learn/courses/30/lessons/42587?language=java

🎯 풀이

  1. priority와 index를 한꺼번에 관리하기 위해 구조체(Class)생성.
  2. 구조체화 시킨 데이터를 Queue에 삽입.
  3. Queue 루프를 돌면서 Priority 비교
    1. Priority가 제일 크다면, Queue에서 제외.
      1. index가 내가 원하는 프린트물과 같다면 종료 후 반환.
    2. Priority가 더 큰 구조체가 있다면, Queue 뒤에 재삽입.
import java.util.*;
// 구조체 생성
class Print {
    int index;
    int priority;
    // 구조체 생성자
    public Print(int index, int priority) {
        this.index = index;
        this.priority = priority;
    }
}
class Solution {
    public int solution(int[] priorities, int location) {
        // Queue와 결과 반환 값 선언.
        Queue<Print> PrintList = new LinkedList<>();
        int printOrder = 0;
        // 구조체 생성 후 Queue에 삽입.
        for(int i = 0; i < priorities.length; i++)
            PrintList.add(new Print(i, priorities[i]));
        // Queue가 모두 빌 때까지 루프 진행.
        while(!PrintList.isEmpty()){
            // Queue의 가장 앞 구조체 가져오기.
            Print current = PrintList.poll();
            boolean Printing = true;
            // Queue에 남은 구조체들과 priority 비교 진행
            for(Print compare : PrintList){
                // 나보다 큰 녀석이 있었다면, 프린트X 표기.
                if(compare.priority > current.priority){
                    Printing = false;
                    break;
                }
            }

            if(Printing){ // 프린트O 라면?
                printOrder += 1; // 결과 반환 값 + 1
                // 만일 내가 원하는 프린트물이었다면, 루프 탈출.
                if(current.index == location) break;
            }
            // 프린트 X 라면, 다시 Queue의 맨 뒤에 삽입.
            else PrintList.add(current);
        }
        return printOrder;
    }
}

자바 클래스를 구조체로 활용한 문제였다.
구조체를 오랜만에 사용해봐서 엉거주춤 했는데,
잘 돼서 다행이다.

댓글남기기