[Python - Lv.2] 프로세스

2024. 3. 20. 20:53·알고리즘 연습/프로그래머스

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제
문제

문제 이해

  • 운영체제가 다음 규칙을 따라 프로세스를 관리할 경우 특정 프로세스는 몇 번째로 실행되는가?
    1. 실행 대기 큐에서 대기중인 프로세스 하나 꺼냄
    2. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있으면 다시 큐에 넣음
    3. 만약 그런 프로세스가 없다면 해당 프로세스 실행하고, 큐에 넣지 않음
  • 프로세스의 중요도 배열 priorities, 프로세스의 위치 location

풀이

프로세스 실행 과정대로 진행하면서 해당 location에 존재하는 프로세스가 몇 번째로 실행되는지 구함
  1. 무한 반복을 통해 location에 있는 프로세스가 실행될 때까지 반복
  2. priorities에서 맨 앞에 있는 걸 pop
  3. 우선순위가 더 큰게 존재하면 다시 큐에 append, 없으면 해당 프로세스는 실행되며 cnt += 1
  4. 실행된 프로세스가 location에 위치한 프로세스라면 cnt 반환
  5. 해당 location의 프로세스가 다시 append 되는 경우 i와 location 갱신

코드

우선 순위가 차례로 존재(ex. [6, 5, 4, 3, 2, 1])하는 경우와 처음 priorities의 길이가 1일 경우 모두 pop이 되고 빈 배열의 max를 구할 수 없어 런타임 에러가 발생한다. 따라서 while문 처음에 길이가 1일 경우 반환할 수 있도록 if문을 추가하였다. 추가로 location과 i를 갱신하는 과정에서 while문의 맨 아래에서 i += 1을 해주기 때문에 -1로, 다시 append를 하여 맨 뒤에 위치하므로 location은 len(priorities) - 1로 갱신해주었다.

def solution(priorities, location):    
    cnt, i = 0, 0
    while True:
        if len(priorities) == 1:
            return cnt + 1
        
        p = priorities.pop(0)
        if p < max(priorities):
            priorities.append(p)
            if location == i:
                i, location = -1, len(priorities) - 1
        else:
            cnt += 1
            
        if location == i:
            return cnt

        i += 1

'알고리즘 연습 > 프로그래머스' 카테고리의 다른 글

[Python - Lv.2] 행렬의 곱셈  (0) 2024.03.23
[Python - Lv.2] 전화번호 목록  (0) 2024.03.21
[Python - Lv.2] 의상  (0) 2024.03.19
[Python - Lv.2] 기능개발  (3) 2024.03.18
[Python - Lv.2] n^2 배열 자르기  (0) 2024.03.17
'알고리즘 연습/프로그래머스' 카테고리의 다른 글
  • [Python - Lv.2] 행렬의 곱셈
  • [Python - Lv.2] 전화번호 목록
  • [Python - Lv.2] 의상
  • [Python - Lv.2] 기능개발
기억에 남는 블로그 닉네임
기억에 남는 블로그 닉네임
  • 기억에 남는 블로그 닉네임
    얕게, 깊게
    기억에 남는 블로그 닉네임
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 분류 전체보기
      • Data Engineering
        • Airflow
        • 빅데이터
        • 자동화
        • 기타
      • Infra
        • AWS
        • Terraform
        • [인프라 구축기] Terraform 활용 AWS ..
      • CS
        • 자료구조
        • 알고리즘
        • 네트워크
        • 데이터베이스
        • 이것이 취업을 위한 코딩 테스트다 with 파이썬
      • Python
      • Web
      • Git
      • 기타
        • 취업 & 진로
        • 회고록
        • 기타
      • 프로젝트 단위 공부
        • [부스트코스] DataLit : 데이터 다루기
        • [개인 프로젝트] 공모전 크롤링
        • [개인 프로젝트] FC Online 공식 경기 분..
        • 프로젝트 개선 방안
      • [프로그래머스] 데이터 엔지니어링 데브코스 3기
        • TIL(Today I Learn)
        • 숙제
        • 기타
      • 알고리즘 연습
        • 프로그래머스
        • 백준
  • 링크

    • 깃허브
    • 링크드인
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기억에 남는 블로그 닉네임
[Python - Lv.2] 프로세스
상단으로

티스토리툴바