본문 바로가기
JAVA

코딩테스트 연습 -> 스택/큐 ->프린터

by Hwoarang757 2021. 8. 13.

출처 : 코딩테스트 연습 - 프린터 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

흑 ㅠㅠ 저는 많이 공부해야겠네요 -0-;;;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

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

		  LinkedList<Ctx> arr = new LinkedList<>();
		  Stack<Ctx> s = new Stack<>();
		//Queue<Ctx> q = new LinkedList<>();

		int idx = 0;
		Ctx ctx = null;
		for(int i : priorities) {
			ctx = new Ctx();
			ctx.a = idx;
			ctx.b = i;

			arr.add(ctx);
			idx++;
		}

		// 1. MAX 값을 구하도록 한다.
		Ctx maxCtx = null;
//		if(maxCtx.a == 0 )  return location + 1;
		//System.out.println(arr);
           idx = 0;
		while(!arr.isEmpty()) {
            maxCtx =  arr.stream().max((a,b) -> Integer.compare(a.b , b.b)).orElse(new Ctx());
			for(int i = 0 ; i < arr.size() ; i++) {
				if(arr.peek().b < maxCtx.b) {
						Ctx tmp = arr.pollFirst();
						arr.offerLast(tmp);
				}
               // System.out.println(String.format("arr%d=%s",idx,arr));
			}
            
               // System.out.println(String.format("s%d=%s",idx,arr));
			if(!arr.isEmpty()) s.push(arr.pollFirst());
        idx++;
		}

		//System.out.println(s);
		return s.indexOf(s.stream().filter(a -> a.a == location).findFirst().get()) + 1;
	  }


		      public static class Ctx {
		    	public Integer a;
		    	public Integer b;
		    	@Override
		    	public String toString() {
		    		return String.format("%d %d\n", a,b);
		    	}
		    }

}