프로세스 (Process)

2025. 10. 14. 20:20·Coding Test/Programmers

난이도: level2

링크: 프로세스

풀이 날짜: 2025.10.14

 

1. 문제 이해

운영체제의 프로세스들은 각각 우선순위(priority) 를 가지고 있으며, CPU는 가장 높은 우선순위의 프로세스부터 실행한다.

만약 대기열의 맨 앞 프로세스보다 더 높은 우선순위를 가진 프로세스가 뒤에 있다면, 그 프로세스는 맨 뒤로 이동한다.

이때, 내가 요청한 특정 위치(location)의 프로세스가 몇 번째로 실행되는지 구하는 문제이다.

 

2. 접근 아이디어

이 문제는 “우선순위 기반 프로세스 스케줄링”을 큐(Queue) 로 시뮬레이션하는 문제다.

 

아이디어를 정리하면 아래와 같다.

 

2. 각 프로세스를 index와 우선순위(priority) 로 묶어 관리한다.

let queue = priorities.map((val, idx) => ({ idx, val }));

 

2. 큐의 맨 앞 프로세스를 꺼내(shift()), 뒤에 자신보다 우선순위가 높은 프로세스가 있는지(some()) 확인한다.

3. 더 높은 프로세스가 있다면 맨 뒤로 이동, 없다면 실행(printed) 리스트에 추가한다.

4. 실행된 프로세스의 인덱스가 내가 찾는 location과 일치하면, 현재까지 실행된 순서를 반환한다.

 

3. 풀이 코드

function solution(priorities, location) {
    let queue = priorities.map((val, idx) => ({ idx, val })); // 인덱스와 값을 관리
    const printed = [];

    while (queue.length) {
        const now = queue.shift(); // 맨 앞 프로세스를 꺼낸다.
        const hasHigher = queue.some(v => v.val > now.val); // 뒤에 더 높은 우선순위 존재여부 확인

        if (hasHigher) {
            // 뒤로 이동
            queue.push(now);
        } else {
            // 실행
            printed.push(now);

            // 여기에서! 방금 실행한 프로세스가 실행순서를 알고 싶은 프로세스라면, 실행 순서를 반환한다.
            if (location === now.idx) return printed.length;
        }
    }
}
구분 복잡도 설명
시간 복잡도 O(n²) some()으로 큐 전체를 매번 순회하기 때문
공간 복잡도 O(n) 큐와 실행 결과를 저장하는 공간

 

4. 요약 및 정리

포인트 설명
탐색 구조 Queue (FIFO)
제어 방식 some()으로 더 높은 우선순위 확인 후 push/실행
종료 조건 location과 idx 일치 시 반환
주의점 단순 정렬로 풀면 실제 실행 순서를 잃음

이 문제는 단순한 우선순위 정렬 문제가 아니라, “큐의 회전과 실행 흐름을 시뮬레이션하는 문제” 로,

실제 운영체제의 프로세스 스케줄링과 매우 유사한 동작 방식을 구현해내는 것이 포인트라 생각한다.

'Coding Test > Programmers' 카테고리의 다른 글

다리를 지나는 트럭 (Bridge Truck)  (0) 2025.10.14
'Coding Test/Programmers' 카테고리의 다른 글
  • 다리를 지나는 트럭 (Bridge Truck)
JTB
JTB
웹/앱 개발 정보를 공유하고 있습니다.
  • JTB
    JTechBlog
    JTB
  • 전체
    오늘
    어제
    • All About Programming;) N
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
      • Frontend N
        • Javascript Essentials N
        • Perfomance Optimization
        • JS Patterns
        • Next.js
        • Flutter
        • Testing
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test N
        • LeetCode
        • Programmers N
      • Tech Books & Lectures
        • Javascript_Modern JS Deep d..
        • Network_IT 엔지니어를 위한 네트워크 입문
      • Projects
        • PolyLingo_2025
        • Build Your Body_2024
        • JStargram_2021
        • Covid19 Tracker_2021
        • JPortfolio_2021
      • BootCamp_Codestates
        • TIL
        • TILookCloser
        • Pre Tech Blog
        • IM Tech Blog
        • Daily Issues and DeBugging
        • First Project
        • Final Project
        • Sprint Review
        • Good to Know
        • Socrative Review
        • HTML & CSS
  • 블로그 메뉴

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

    • 글쓰기
    • 관리
  • 공지사항

  • 인기 글

  • 태그

    leetcode
    Operating System
    TCP/IP
    Time complexity and Space complexity
    딥다이브
    How memory manage data
    polylingo
    need a database
    스코프
    Javascript Essentials
    Binary Tree BFS
    Shared resources
    mobile app
    js pattern
    자바스크립트 딥다이브
    DOM
    Threads and Multithreading
    CPU scheduling algorithm
    indie hacker
    커리어
    testing
    모던 자바스크립트 Deep Dive
    Network
    프론트엔드 성능 최적화 가이드
    structure of os
    database
    이벤트
    VoiceJournal
    자바스크립트
    Data Structure
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
JTB
프로세스 (Process)
상단으로

티스토리툴바