[프로그래머스] 프로세스 - 42587 (Java)

2025. 7. 28. 19:01·알고리즘/Java
반응형

✨ 문제 URL

https://school.programmers.co.kr/learn/courses/30/lessons/42587?language=java

✨ 문제 설명


💡 접근 방법: PriorityQueue로 최대 우선순위 추적하기

이 문제는 가장 높은 중요도를 가진 문서를 먼저 처리해야 하므로
우선순위 큐(PriorityQueue)를 이용하면 효율적으로 해결할 수 있습니다.

 

하지만 Java의 PriorityQueue는 기본적으로 최소 힙(작은 값이 먼저 나오는 구조) 으로 동작합니다.


따라서 최대값이 먼저 나오게 하려면 Collections.reverseOrder()를 사용해야 합니다.


✅ 코드 풀이

import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;

        // 우선순위가 높은 순서대로 꺼내기 위해 최대 힙 선언
        PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());

        // 전체 우선순위를 큐에 넣음
        for(int num : priorities) {
            pq.add(num);
        }

        // 큐가 빌 때까지 반복
        while(!pq.isEmpty()) {
            for(int i = 0; i < priorities.length; i++) {
                // 현재 문서가 가장 높은 우선순위인 경우
                if(priorities[i] == pq.peek()) {
                    pq.poll();     // 꺼냄
                    answer++;      // 출력된 문서 수 증가
                    if(i == location)  // 찾는 문서라면
                        return answer;
                }
            }
        }

        return answer;
    }
}

🔍 핵심 포인트 정리

1. PriorityQueue란?

PriorityQueue는 우선순위가 높은 요소를 먼저 처리하는 큐입니다.

 

일반적인 Queue가 FIFO(First-In-First-Out) 구조인 것과 달리,
PriorityQueue는 내부적으로 힙(Heap) 자료구조를 사용해
우선순위가 높은 값(기본적으로는 작은 값) 을 먼저 꺼내도록 설계되어 있습니다.

2. Collections.reverseOrder()

  • reverseOrder()를 사용하면 내림차순, 즉 가장 큰 수가 먼저 나옵니다.
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());

이렇게 선언하면 가장 큰 값부터 꺼내는 최대 힙처럼 동작합니다.

3. 문서의 위치 추적

  • 우리는 특정 위치(location)에 있는 문서가 몇 번째로 인쇄되는지 알아야 하므로,
    우선순위와 함께 해당 문서의 인덱스도 추적해야 합니다.
if (i == location) {
    return answer;
}

이 조건을 통해, 우리가 찾고 있는 문서가 인쇄될 때의 순서를 반환할 수 있습니다.

반응형

'알고리즘 > Java' 카테고리의 다른 글

[Leetcode] 3. Longest Substring Without Repeating Characters  (0) 2025.08.22
[프로그래머스] 베스트앨범 - 42579 (Java)  (0) 2025.01.20
[프로그래머스] 오픈채팅방 - 42888(Java)  (0) 2025.01.16
[프로그래머스] 할인 행사 - 131127(Java)  (0) 2025.01.09
[프로그래머스] 완주하지 못한 선수 - 42576(Java)  (0) 2025.01.07
'알고리즘/Java' 카테고리의 다른 글
  • [Leetcode] 3. Longest Substring Without Repeating Characters
  • [프로그래머스] 베스트앨범 - 42579 (Java)
  • [프로그래머스] 오픈채팅방 - 42888(Java)
  • [프로그래머스] 할인 행사 - 131127(Java)
Kim-SooHyeon
Kim-SooHyeon
개발일기 및 알고리즘, 블로그 운영에 대한 글을 포스팅합니다. :) 목표: 뿌리 깊은 개발자 되기
    반응형
  • Kim-SooHyeon
    soo_vely의 개발로그
    Kim-SooHyeon
  • 전체
    오늘
    어제
    • 분류 전체보기 (253)
      • 알고리즘 (108)
        • 자료구조 (3)
        • Java (104)
        • Python (1)
      • Back end (70)
        • Spring Project (27)
        • Java (21)
        • API (1)
        • Python (0)
        • Django (3)
        • Linux (1)
        • 서버 (2)
        • 에러로그 (11)
        • 부스트 코스 (1)
      • Front end (9)
        • HTML, CSS (4)
        • JavaScript (4)
        • JQuery (0)
      • 기타 프로그래밍 (4)
        • Android Studio (1)
        • Arduino (2)
        • Azure Fundamental(AZ-900) (1)
      • 개발도구 (23)
        • Git (12)
        • SVN (0)
        • Eclipse (2)
        • 기타 Tool (9)
      • Database (16)
        • Oracle (10)
        • MySQL (0)
        • H2 Database (3)
        • ORM & JPA (1)
      • 자격증 (10)
        • 컴활 1급 (7)
        • 컴활 2급 (2)
        • SQLD (1)
      • 기타 (13)
        • 블로그 운영 (6)
        • 문서 (1)
        • 기타 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    문자열
    for문
    BOJ
    spring
    백준알고리즘
    단계별풀기
    오라클
    jpa
    java
    solved.ac
    springboot
    백준 자바
    1차원 배열
    배열
    구현
    백준
    Git
    Oracle
    github
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kim-SooHyeon
[프로그래머스] 프로세스 - 42587 (Java)
상단으로

티스토리툴바