본문 바로가기

코딩테스트/프로그래머스

[프로그래머스 - Level2] 프린터 / 2022.07.09

 

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

 

프로그래머스

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

programmers.co.kr

 

import java.util.*;
class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0; 
        char ask = 'A'; // 내가 요청한 문서 이름 변수
        // 중요도 큐 , 문서 이름 큐 선언
        Queue<Integer> printer = new LinkedList<>(); 
        Queue<Character> name = new LinkedList<>();
        // 중요도 배열 값을 큐에 저장
        // 문서 이름은 A 부터 하나씩 늘려가며 저장
        for(int i=0; i<priorities.length; i++){
            printer.offer(priorities[i]);
            name.offer((char)(65+i));
            // 만약 i의 값이 내가 요청한 문서 이름의 위치와 같다면
            if(i==location) {
                ask = (char)(65+i); // 변수 값에 내가 요청한 문서 이름 저장
            }
        }

        while(true){
            boolean dap = true;
            // 두 개의 큐 맨 앞의 값을 꺼내오기
            int ans = printer.poll();
            char ans2 = name.poll();
            for(int i : printer){
                // 만약 뒤에 ans 값보다 큰 값이 있다면
                // 인쇄 못함
                if(ans < i){
                    dap = false;
                    break;
                }
            }
            if(dap == false){ // 인쇄를 못하니까 다시 넣어줌
                printer.offer(ans);
                name.offer(ans2);
            } else { // 인쇄를 할 수 있다면
                answer++; // 인쇄 했다고 알림
                // 만약 인쇄한 문서의 이름이 내가 요청 이름과 같다면
                if(ans2 == ask){ 
                    return answer;
                }
            }
        }
    }
}