티스토리 뷰

Algorithm/Solution

[프로그래머스] - 프린터

기내식은수박바 2019. 11. 25. 12:50
반응형

문제

  1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
  2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
  3. 그렇지 않으면 J를 인쇄합니다.

 

조건

 

입출력 예제

 

솔루션

  1. 먼저 문서의 인덱스와 중요도를 가지고 있는 문서 객체를 만드는 클래스를 구현한다.
    • 클래스 생성 이유 ?) 문서의 인덱스와 중요도를 함께 다루기 위해서 (배열 2개를 사용할 경우 굉장히 번거로울 거라 생각).
  2. idx중요도가 높은 것부터 차례대로 접근하기 위한 인덱스이며, 순차적으로 문서를 뽑아내는 것이므로 큐 자료구조를 사용한다.
  3. 중요도가 담겨 있는 priorities 배열을 순서대로 모두 큐에 삽입해준다 (Offer()).
  4. priorities 배열을 오름차순 정렬해준다 (Arrays는 내림차순을 할 경우, int -> Integer로 바꿔줘야 함).
    • Why 정렬 ?) idx를 이용하여 중요도가 높은 것들을 순서대로 접근할 수 있도록 하기 위해서.
  5. 조건이 만족 될 때까지 반복문을 계속 실행한다 (조건 : location의 문서가 뽑혔는지).
    1. 큐에서 문서를 하나 뽑아 (Poll()) cur객체에 넣는다.
    2. cur의 중요도와 priorities[idx]가 같다면 (현재 남은 문서들 중 중요도가 가장 높은 문서라는 것), 중요도가 그 다음으로 높은 문서인지 비교하기 위해 idx를 1 감소시킨다.
      • 그런데 현재 뽑은 문서 cur의 인덱스가 location과 동일하다면 (조건이 만족), 지금 뽑힌 순서를 answer에 담아주고 루프를 빠져나간다.
    3. 같지 않다면, 뽑은 문서를 다시 큐에 집어넣는다 (Offer()).
  6. 루프를 빠져나온 뒤, answer를 반환한다.

 

Code

문서의 인덱스, 중요도를 저장하는 객체를 만드는 Doc 클래스

solution 함수

 

 

결과

반응형

'Algorithm > Solution' 카테고리의 다른 글

[프로그래머스] - 주식가격  (0) 2019.11.27
[프로그래머스] - 모의고사  (0) 2019.11.27
[프로그래머스] - 탑  (0) 2019.11.27
[프로그래머스] - 캐시  (0) 2019.11.26
[프로그래머스] - 짝지어 제거하기  (0) 2019.11.25
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함