프로그래머스 : 프린터

김아무개·2023년 3월 18일
0

프로그래머스

목록 보기
17/41

문제 설명

내 코드

import java.util.*;
class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        Queue<int[]> q = new LinkedList();
        for (int i = 0; i < priorities.length; i++) {
            q.offer(new int[]{priorities[i], (location == i) ? 1 : 0});
        }
        
        Arrays.sort(priorities);
        int maxIdx = priorities.length - 1;
        
        while (!q.isEmpty()) {
            int[] get = q.poll();
            
            if (get[0] != priorities[maxIdx]) q.offer(get);
            else {
                answer++;
                maxIdx--;
                
                if (get[1] == 1) break;
            }
        }
        return answer;
    }
}

1. 우선순위 목록을 큐에 담는다.

Queue<int[]> q = new LinkedList();
for (int i = 0; i < priorities.length; i++) {
    if (i == location) q.add(new int[]{priorities[i], 1});
    else               q.add(new int[]{priorities[i], 0});
}
형태 : int[]{ 우선순위, 목표물이면 1 목표물 아니면 0}

2. 우선순위 목록 배열 정렬

Arrays.sort(priorities);
int order = priorities.length - 1;
우선순위가 높은 순서부터 뽑아야 하기때문에 정렬
내림차순 대신 거꾸로 인덱스방향을 진행하기 위해 order 변수 생성
-> Arrays.sort()로 내림차순 하려면 배열 새로 만들어야됨 (int[] -> Integer())

3. 목표물 찾아서 출력

while (!q.isEmpty()) { 
// 목표물이 제일 마지막에 출력될수 있기떄문에 큐가 전부 빈 공간이 될때까지 반복
// 사실 큰 의미가 없는 부분인것 같다. 
// 왜냐하면 목표물이 제일 마지막에 출력되어도 break문으로 인해 먼저 while이 종료되기 때문이다.
// 하지만 오류라던가 어떤 불가피한 상황으로 인해서 
// priority와 location이 매치가 잘못 될 경우도 있지 않을까 하고 생각해보면
// 큐가 빈 공간이 될때까지 반복하는게 맞는것같다!

	// 목표물인지 확인하기위해 큐에서 뽑아냄
    // 목표물이면 반복문 종료
    // 목표물이 아닌데 우선순위가 높으면 뽑아서 버림
    // 목표물이 아닌데 우선순위가 낮으면 맨 뒤로 다시 입력
    int[] priority = q.poll();

    if (priority[0] == priorities[order]) {
        answer++; // 1개 출력이 되었으므로 answer 1 증가
        order--; // 우선순위가 제일 높은게 출력되었으므로 다음 우선순위를 조회하기위해 1 감소 

        if (priority[1] == 1) break; // 목표물이면 반복문 멈춤
    } else {
        q.add(priority); // 우선순위가 낮은애라서 맨 뒤로 다시 입력
    }
}

처음 풀어본 날 : 23.03.18
다시 풀어본 새로 작성한 날 : 23.03.25
다시 풀어본 날 : 23.03.26, 30

profile
Hello velog! 

0개의 댓글