-
프로그래머스 (Level 2) - 프린터Coding Test/Coding Test 문제 풀이 2022. 1. 25. 18:49
문제 설명
코딩테스트 연습 - 프린터
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린
programmers.co.kr
풀이
1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다.
지문에 주어진 위의 조건에 따라 코드를 구현하면 되는 문제이다.
우선, 인쇄물의 정보를 정의한 클래스를 생성해주었다. 각 인쇄물은 중요도와 번호에 대한 정보를 가지게 된다. 가장 앞에 있는 문서를 하나씩 탐색하기 위해서 큐 자료구조를 이용했다. 큐 자료구조에 매개변수로 주어진 인쇄물의 정보를 삽입한다.
큐에 모든 인쇄물의 정보를 삽입한 후 인쇄를 시작한다. 큐에 저장된 문서를 하나씩 빼면서 기존의 저장된 문서들의 중요도와 비교한다. 아래와 같은 과정을 큐가 빌 때까지 반복한다.
1. 대기목록의 문서들 중 중요도가 높은 문서가 하나라도 존재하는 경우 : 현재 탐색 중인 문서를 다시 큐에 삽입한다.
2. 대기목록의 문서들 중 중요도가 높은 문서가 없는 경우 : 현재 탐색 중인 문서를 리스트에 삽입한다.
위 과정이 마무리된 후 리스트(인쇄 완료 목록)를 탐색하며 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 반환한다.
전체 소스코드
import java.io.*; import java.util.*; public class Solution07 { static Queue<Item> queue = new LinkedList<>(); // 인쇄 대기목록 static List<Item> list = new ArrayList<>(); // 인쇄 완료목록 public int solution(int[] priorities, int location) { int index = 0; for (int priority : priorities) { queue.add(new Item(priority, index++)); } print(); int answer = 1; for (Item item : list) { if (item.number == location) break; answer++; } return answer; } /** 인쇄물을 인쇄하는 메서드 */ static void print() { while (!queue.isEmpty()) { Item item = queue.poll(); /* 대기목록에서 중요도가 높은 문서가 하나라도 존재하는 경우 */ if (compare(item)) queue.add(item); /* 그렇지 않은 경우 */ else list.add(item); } } /** 현재 문서의 중요도와 대기목록 문서의 중요도를 비교하는 메서드 */ static boolean compare(Item item) { for (Item another : queue) { if (item.priority < another.priority) return true; } return false; } /** 인쇄물의 정보를 정의한 클래스 */ static class Item { int priority; // 인쇄물의 중요도 int number; // 인쇄물의 번호 Item(int priority, int number) { this.priority = priority; this.number = number; } } }
728x90'Coding Test > Coding Test 문제 풀이' 카테고리의 다른 글
프로그래머스 (Level 3) - 단어 변환 (0) 2022.01.26 프로그래머스 (Level 3) - 네트워크 (0) 2022.01.26 프로그래머스 (Level 2) - 위장 (0) 2022.01.06 프로그래머스 (Level 2) - 타겟 넘버 (0) 2022.01.05 프로그래머스 (Level 1) - 체육복 (0) 2022.01.04