알고리즘 공부/프로그래머스

(Java)프로그래머스 코딩테스트 연습 - 스택/큐 - 프린터

HRuler 2020. 11. 13. 16:32

1. 문제

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

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

2. 나의 풀이

import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
        ArrayList <Integer> arr1 = new ArrayList <Integer>();
    	ArrayList <Integer> arr2 = new ArrayList <Integer>();
    	for(int i = 0; i < priorities.length; i = i + 1) {
    		arr1.add(priorities[i]);
    		arr2.add(i+1);
    	}
    	//System.out.println("arr1 : " + arr1 + ", arr2 : " + arr2);
    	for(int i = 0; i < priorities.length; ) {
    		if(i == priorities.length - 1) {
    			break;
    		}
    		boolean check = false;
    		for(int j = i + 1; j < priorities.length; j = j + 1) {
    			if(arr1.get(i) < arr1.get(j)) {
    				arr1.add(arr1.get(i));
    				arr1.remove(i);
    				arr2.add(arr2.get(i));
    				arr2.remove(i);
    				check = true;
    				break;
    			}
    		}
    		if(check == false) {
    			i++;
    		}
        	//System.out.println("arr1 : " + arr1 + ", arr2 : " + arr2);
    		//System.out.println("i : " + i);
    	}
    	for(int i = 0; i < priorities.length; i = i + 1) {
    		if(arr2.get(i) == (location + 1)) {
    			return i + 1;
    		}
    	}
    	
    	return 0;
    }
}

- ArrayList 객체를 2개 생성한 후 첫 번째는 기존 priorities 배열을 넣고 두 번째는 1부터 priorities배열 개수만큼을 배열에 넣는다. 후에 문제의 내용 처럼 첫 인덱스의 배열 요소 보다 작을 경우 배열의 맨 뒤로 시킨다. 이 때 두 번째 ArrayList또한 동일하게 이동시켜 마지막까지 내림차순으로 정렬되었을 때 두 번째 ArrayList에서 문제에서 요청하는 location의 위치를 확인하여 리턴한다.

3. 다른 사람 풀이

import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        int l = location;

        Queue<Integer> que = new LinkedList<Integer>();
        for(int i : priorities){
            que.add(i);
        }

        Arrays.sort(priorities);
        int size = priorities.length-1;



        while(!que.isEmpty()){
            Integer i = que.poll();
            if(i == priorities[size - answer]){
                answer++;
                l--;
                if(l <0)
                    break;
            }else{
                que.add(i);
                l--;
                if(l<0)
                    l=que.size()-1;
            }
        }

        return answer;
    }
}