📝 문제
https://programmers.co.kr/learn/courses/30/lessons/42587?language=java
🎯 풀이
- priority와 index를 한꺼번에 관리하기 위해 구조체(Class)생성.
- 구조체화 시킨 데이터를 Queue에 삽입.
- Queue 루프를 돌면서 Priority 비교
- Priority가 제일 크다면, Queue에서 제외.
- index가 내가 원하는 프린트물과 같다면 종료 후 반환.
- Priority가 더 큰 구조체가 있다면, Queue 뒤에 재삽입.
- 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;
}
}
자바 클래스를 구조체로 활용한 문제였다.
구조체를 오랜만에 사용해봐서 엉거주춤 했는데,
잘 돼서 다행이다.
댓글남기기