[프로그래머스|JAVA] 프로세스 | Queue 활용 ⭕️ | 자세한 코드 흐름 설명 💬

2025. 8. 24. 14:04·💻코딩/💡Programmers
728x90
반응형

[문제 링크]

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

[문제]

 

입출력 예

priorities location return
[2, 1, 3, 2] 2 1
[1, 1, 9, 1, 1, 1] 0 5

 

📍 [코드]

import java.util.*;

/*
1. 우선 순위와 인덱스 큐에 저장

2. 우선 순위 기준으로 내림차순 정렬

3. 정렬된 리스트를 순회하면서:
   - 실제 큐에서 문서를 하나씩 꺼낸다
   - 그 문서가 정렬 리스트의 현재 값과 같으면 count++
   - 해당 문서의 인덱스가 location과 같으면 return count
 */


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

        //큐 (인덱스, 우선순위)
        Queue<int[]> queue = new LinkedList<>();
        for (int i = 0; i < priorities.length; i++) {
            queue.offer(new int[]{i, priorities[i]});
        }

        //우선순위 내림차순 정렬 리스트 생성
        List<Integer> sortedPriorities = new ArrayList<>();
        for (int p : priorities) {
            sortedPriorities.add(p);
        }
        sortedPriorities.sort(Collections.reverseOrder());  // 내림차순 정렬

        int priorityIndex = 0; // 현재 처리할 우선순위 인덱스

        while (!queue.isEmpty()) {
            int[] current = queue.poll(); // [index, priority]

            if (current[1] == sortedPriorities.get(priorityIndex)) {
                count++;
                if (current[0] == location) {
                    return count;
                }
                priorityIndex++; // 다음 우선순위로
            } else {
                queue.offer(current); // 다시 뒤로 보냄
            }
        }

        return count; // 도달 불가능
    }
}

 

💡 접근법

✅ Queue 사용

  1. 우선 순위와 인덱스 큐에 저장
  2. 우선 순위 기준으로 내림차순 정렬
  3. 정렬된 리스트를 순회하면서:
    •  실제 큐에서 문서를 하나씩 꺼낸다.
    • 그 문서가 정렬 리스트의 현재 값과 같으면 count++
    • 해당 문서의 인덱스가 location과 같으면 return count

📚 코드 흐름 설명

  • priorityIndex = 0 → 현재 확인할 "가장 높은 우선순위"는 3

Step 1️⃣

  • poll() → [0,2]
  • 현재 priority = 2, 최고 우선순위 = 3
  • ❌ 같지 않음 → 뒤로 보냄
queue = [[1,1], [2,3], [3,2], [0,2]]

Step 2️⃣

  • poll() →[1,1]
  • 현재 priority = 1, 최고 우선순위 = 3
  • ❌ 다시 뒤로 보냄
queue = [[2,3], [3,2], [0,2], [1,1]]

 


Step 3️⃣

  • poll()→ [2,3]
  • 현재 priority = 3, 최고 우선순위 = 3
  • ✅ 일치 → count 증가
count = 1
priorityIndex = 1  (다음 최고 우선순위 = 2)

 

그리고 현재 문서 인덱스 = 2

찾던 location = 2와 같음  → return 1

 

 


 

💬 마무리

이 문제를 풀며 아직 내가 Queue를 다루는 게 미흡하구나를 깨달았다.
또한, 코드가 길어지는 것을 두려워하지 않는 마인드도 필요한 것 같다.

 

 

 

 

 

728x90
반응형

'💻코딩 > 💡Programmers' 카테고리의 다른 글

[프로그래머스|JAVA] 문자열 내 마음대로 정렬하기 | Comparator 사용 ⭕️ | @Override 활용 | 풀이법 2️⃣가지 | 스트림 ⭕️❌  (0) 2025.08.24
[프로그래머스|JAVA] 스킬 트리 🌲 | 트리 순회 방식 | 선형 탐색  (0) 2025.08.24
[프로그래머스|JAVA] 올바른 괄호 | 스택 사용 ⭕️ | 간단 풀이 | 스택 사용 ❌ 방법 | 풀이법 2️⃣가지  (2) 2025.08.24
[프로그래머스|JAVA] 주식 가격 | 스택 / 큐 사용 ❌ | 간단 풀이 | 스택 / 큐 방법 포함 ⭕️ | 풀이법 2️⃣가지  (4) 2025.08.24
[프로그래머스|JAVA] 로또의 최고 순위와 최저 순위 | Set 활용, 향상된 for문 연습 중 💬, case 문  (4) 2025.08.14
'💻코딩/💡Programmers' 카테고리의 다른 글
  • [프로그래머스|JAVA] 문자열 내 마음대로 정렬하기 | Comparator 사용 ⭕️ | @Override 활용 | 풀이법 2️⃣가지 | 스트림 ⭕️❌
  • [프로그래머스|JAVA] 스킬 트리 🌲 | 트리 순회 방식 | 선형 탐색
  • [프로그래머스|JAVA] 올바른 괄호 | 스택 사용 ⭕️ | 간단 풀이 | 스택 사용 ❌ 방법 | 풀이법 2️⃣가지
  • [프로그래머스|JAVA] 주식 가격 | 스택 / 큐 사용 ❌ | 간단 풀이 | 스택 / 큐 방법 포함 ⭕️ | 풀이법 2️⃣가지
망꼬누나
망꼬누나
공부한 내용을 정리하는 공간입니다.
  • 망꼬누나
    망꼬누나의 개발 공부
    망꼬누나
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • ℹ️ 정보 및 실습 (19)
        • ☑️ Git & GitHub (8)
        • ☑️ 프로젝트 (6)
        • ☑️ 회고 및 후기 (5)
      • 🛠 CS (1)
      • 💻코딩 (88)
        • 💡Baekjoon (17)
        • 💡Programmers (71)
      • ✏️공부 (48)
        • 💡OS (1)
        • 💡Network (6)
        • 💡SpringBoot (9)
        • 💡JAVA (21)
        • 💡SQL (1)
        • 💡DB (2)
        • ☁️ Cloud (4)
        • 💡알고리즘 (4)
      • 📌 자격증 (6)
        • 📝정보처리기사 (3)
        • 📝SQLD (3)
  • 블로그 메뉴

    • 홈
    • github
  • 나의 GitHub Contribution 그래프
    Loading data ...
  • 인기 글

  • 태그

    github
    GIT
    프로그래머스 #JAVA
    map
    Java
    S3
    Stream
    백엔드
    코딩테스트
    프로그래머스
    트랜잭션
    자바
    Set
    네트워크
    AWS
    동시성제어
    데브코스
    자료구조
    알고리즘
    baekjoon
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.5
망꼬누나
[프로그래머스|JAVA] 프로세스 | Queue 활용 ⭕️ | 자세한 코드 흐름 설명 💬
상단으로

티스토리툴바