본문 바로가기
Algorithm/Programmers

[프로그래머스] 프린터 자바

by YOONAYEON 2021. 10. 26.
문제

 

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

 

 

문제풀이

 

 

 

소스코드

 

class Solution {
    public int solution(int[] priorities, int location) {
		int[] moveIndex = new int[priorities.length];
		int current = 0, temp = 0, m_temp = 0;
		boolean isExist = false;

		//초기 대기열의 인덱스 대입
		for(int i = 0; i < priorities.length; i++)
			moveIndex[i] = i;
		
        	//프린트 순서 정하기
		while(temp != priorities.length) {
			current = priorities[temp];
			
			for(int j = temp+1; j < priorities.length; j++)
				if(current < priorities[j]) 	// 우선순위가 더 높은게 있나 검사
					isExist = true;
			
			if(isExist) {	// 한칸씩 앞당기기
				for(int k = temp; k < priorities.length-1; k++) 
					priorities[k] = priorities[k+1];
				priorities[priorities.length-1] = current;
				
				for(int k = 0; k < priorities.length; k++)
					if(moveIndex[k] >= m_temp) {	// 이미 순서가 정해진 인덱스는 제외하고 변경시키기 위해
						if(moveIndex[k] == m_temp)	// 맨 앞에 있으면
							moveIndex[k] = priorities.length - 1;	// 맨 뒤 인덱스로 바꿔줌
						else
							moveIndex[k] -= 1;	// 한 칸씩 앞으로 당겨지므로
					}
			}
			
			if(!isExist){	// 우선순위가 높은게 없다면 그게 일순위
				temp++;
                m_temp++;
            }
			
			isExist = false;
		}
            
		return moveIndex[location] + 1;
    }
}