반응형

문제 설명

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다.

 

프로그래머스

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

programmers.co.kr

나의 풀이 (java)

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

class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        // 필요한 변수 생성 (가장 높은 우선순위, 정렬된 우선순위, 우선순위 리스트)
        Integer biggestNum = 0;
        Queue<Integer> queue = new LinkedList<>();
        ArrayList<Integer> sortedPriorities = new ArrayList();
        for (int num: priorities) {
            queue.add(num);
            sortedPriorities.add(num);
        }
        sortedPriorities.sort(Collections.reverseOrder());

        while(true){
            // 큐에서 하나씩 빼거나, 빼서 맨 뒤로 보내거나
            biggestNum = sortedPriorities.get(answer);
            if (location == 0 && queue.peek() == biggestNum){
                answer++;
                break;
            } else if (queue.peek() < biggestNum){
                queue.add(queue.poll());
            } else {
                queue.poll();
                answer++;
            }

            // 내가 선택한 작업의 위치 관리하기
            if(location==0)
                location = queue.size()-1;
            else
                location--;
        }

        return answer;
    }
}

풀이 방법

  • 큐를 이용해 원하는 로직을 구현하기
    • 대기 목록 우선 순위대로 수행 (큐에서 하나씩 빼거나, 빼서 맨 뒤로 보내거나)
    • 적절한 변수 생성 (location:선택한 작업 위치 관리, biggestNum:가장 높은 우선순위)

느낀점

로직 자체는 고민을 좀 하면 나올수 있으나

Array, List, Queue, int형이 섞였을때가 좀 헷갈리니 다시 정리

  • Array 정렬 방법
        - 단순 정렬시 - Array.sort(arr)
  • List 정렬 방법
        - 단순 정렬시 - Collections.sort(list)
// 둘 다 같음
sortedPriorities.sort(Collections.reverseOrder());
Collections.sort(sortedPriorities, Collections.reverseOrder());
반응형

+ Recent posts