250x250
250x250
JinSeopKim
Hello World!
JinSeopKim
전체 방문자
오늘
어제
  • 분류 전체보기 (168)
    • Artificial intelligence (14)
      • DeepDiveToAI (3)
      • Pytorch (3)
      • Etc (8)
    • Back-end (19)
      • Spring (10)
      • JPA (9)
    • Language (24)
      • Python (3)
      • Java (11)
      • Swift (10)
    • Math (4)
      • Linear Algebra (4)
    • CodingTest (79)
      • Algolithm (12)
      • Backjoon (25)
      • Programmers (42)
    • Etc (27)
      • Book Review (3)
      • Adsp (6)
      • Life (2)
      • Docker (1)
      • odds and ends (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • GitHub

인기 글

태그

  • 파이썬
  • java
  • JAVA8
  • SpringMVC
  • JPA
  • 알고리즘
  • Front-end
  • 카카오
  • swift
  • 개발
  • certificate
  • 선형대수
  • AI
  • 백준
  • data
  • 브루트포스
  • 구현
  • 문제풀이
  • BFS
  • 자바
  • uArm
  • 코딩테스트
  • Python
  • 머신러닝
  • ADsP
  • BOJ
  • ios
  • 개발자
  • 프로그래머스
  • DP

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JinSeopKim

Hello World!

[PGM_42587] 프린터  (java)
CodingTest/Programmers

[PGM_42587] 프린터 (java)

2022. 2. 21. 01:45
728x90
728x90

문제링크

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

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

문제풀이

👨🏻‍💻 핵심 스킬 👨🏻‍💻
 Queue

우선순위가 가장 큰 문서부터 먼저 프린터를 하는 문제이다. 만약 우선순위가 대기열에 있던 프린터중에서 제일 높지 않다면 가장 뒤로 넘겨서 처리해주어야한다. 나는 이 문제를 해결하기 위해 Queue를 사용하였다.

 

문서를 프린터하기 위해 대기열에서 빼는 방법은 순서대로 빼주어야하며, 만약 우선순위가 가장 높지 않다면 맨 뒤로 넘겨주어야하기 때문이다.

 

먼저 입력으로 들어온 문서들의 우선순위를 계산하여 가장 높은 우선순위를 가지는 문서의 우선순위 값을 가져온다. 그리고 Queue를 돌면서 우선순위가 가장 높은 문서를 찾아서 출력을 해준다. 이 때 그 문서가 자신의 문서인지 확인해주고 우선순위가 가장 높은 문서 하나가 작업이 끝나기 때문에 다시 가장 큰 우선순위를 찾아주어야한다.

public int findMaxPrior(Deque<Word> deque) {
    int max = 0;
    for (int i = 0; i < deque.size(); i++) {
        Word word = deque.removeFirst();
        max = word.prior > max ? word.prior : max;
        deque.addLast(word);
    }
    return max;
}

위 코드는 가장 큰 우선순위를 구해주는 코드이다. 

 

자신의 문서가 출력될 때 까지 위 방법을 반복해서 수행해주고, 자신의 문서가 나왔다면 순서를 찾아서 리턴해주면 문제를 해결할 수 있다.

구현코드

import java.util.Deque;
import java.util.LinkedList;

public class Solution {
    public int solution(int[] priorities, int location) {
        Deque<Word> printer = new LinkedList<>();
        int maxPrior = 0;
        for (int i = 0; i < priorities.length; i++) {
            maxPrior = maxPrior < priorities[i] ? priorities[i] : maxPrior;
            printer.add(new Word(priorities[i], location == i));
        }

        int count = 0;
        boolean isOk = false;
        while(!isOk){
            Word word = printer.removeFirst();
            if(word.prior == maxPrior){
                count++;
                if(word.isMine)
                    isOk = true;
                else
                    maxPrior = findMaxPrior(printer);
            }
            else{
                printer.addLast(word);
            }
        }

        return count;
    }

    public int findMaxPrior(Deque<Word> deque) {
        int max = 0;
        for (int i = 0; i < deque.size(); i++) {
            Word word = deque.removeFirst();
            max = word.prior > max ? word.prior : max;
            deque.addLast(word);
        }
        return max;
    }

    public class Word {
        int prior;
        boolean isMine;

        public Word(int p, boolean isMine) {
            prior = p;
            this.isMine = isMine;
        }
    }
}
잘못된 지식이나 궁금한 내용이 있을 경우 편하게 댓글 남겨주시면 감사하겠습니다 :)
728x90
728x90
저작자표시 비영리

'CodingTest > Programmers' 카테고리의 다른 글

[PGM_42839] 소수 찾기  (0) 2022.02.22
[PGM_42746] 가장 큰 수 (java)  (0) 2022.02.21
[pgm_64065] 튜플 (java)  (0) 2022.02.15
[pgm_67257] 수식 최대화 (java)  (0) 2022.02.11
[PGM_81302] 거리두기 확인하기 (java)  (0) 2022.02.09
    'CodingTest/Programmers' 카테고리의 다른 글
    • [PGM_42839] 소수 찾기
    • [PGM_42746] 가장 큰 수 (java)
    • [pgm_64065] 튜플 (java)
    • [pgm_67257] 수식 최대화 (java)
    JinSeopKim
    JinSeopKim
    기록📚

    티스토리툴바