프로세스 (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;)
      • Other than Tech
        • 잡생각
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
        • Web Development
      • Frontend
        • Javascript Essentials
        • Perfomance Optimization
        • JS Patterns
        • React
        • Next.js
        • Flutter
        • Testing
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test
        • LeetCode
        • Programmers
      • 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
  • 블로그 메뉴

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

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

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바