본문 바로가기

알고리즘/문제풀이

[프로그래머스] 프린터

반응형

https://programmers.co.kr/learn/courses/30/lessons/42587

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


priorities 에 들어 있는 숫자들을 위치와 함께 기억해야 하기때문에 Pair라는 클래스를 선언했습니다.

idx에는 숫자들의 위치를 기억하고 value에는 숫자들을 저장하여 queue에 먼저 담았습니다.

그리고 priorities 에 있는 숫자들을 정렬하여 가장 큰 숫자가 우선순위가 가장 높기 때문에 queue에서 하나씩 빼가면서 비교했습니다. 우선순위가 가장 높은 숫자가 아니라면 queue에 다시 추가합니다.

queue에서 뺀 숫자들 중에 우선순위가 가장 큰 숫자를 만나게 되면 문제에서 주어진 location 값과 idx 를 비교합니다.

queue에서 우선순위가 가장 높은 숫자부터 빠지게 되면 answer 증가시켜주고 location과 idx가 같을 때의 answer을 정답으로 return 합니다.


import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.Queue;


class Solution {
	
	static class Pair {
		int idx;
		int value;
		
		Pair(int idx, int value){
			this.idx=idx;
			this.value=value;
		}
	}
	
    public static int solution(int[] priorities, int location) {
    	int answer = 0;
    	Queue<Pair> q = new LinkedList();
    	
    	for(int i=0; i<priorities.length; i++) {
    		q.offer(new Pair(i, priorities[i]));
    	}
    	
    
    	Arrays.sort(priorities);
    	
    	Out : for(int i=priorities.length-1; i>=0; i--) {
    		
    		while(true) {
        		Pair p = q.poll();
        		if(priorities[i] != p.value) {
        			q.offer(p);
        		} else {
        			if(p.idx == location) {
        				answer++;
        				break Out;
        			} else {
        				answer++;
        				break;
        			}
        		}
    		}
    	}
    	
    	return answer;
    }
}
반응형

'알고리즘 > 문제풀이' 카테고리의 다른 글

[백준] 3055. 탈출  (0) 2020.06.30
[백준] 16401. 과자 나눠주기  (0) 2020.06.08
[SWEA] 1251. [S/W 문제해결 응용] 4일차 - 하나로  (0) 2020.04.16
[SWEA] 9760. Poker Game  (2) 2020.04.03
[백준] 1707. 이분 그래프  (0) 2020.03.29