상세 컨텐츠

본문 제목

[Programmers][Python] 프로세스

공부

by 근성 2024. 1. 10. 01:50

본문

https://school.programmers.co.kr/learn/courses/30/lessons/42587

 

프로그래머스

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

programmers.co.kr

현재 실행 대기 큐(Queue)에 있는 프로세스의 중요도가 순서대로 담긴 배열 priorities와, 몇 번째로 실행되는지 알고싶은 프로세스의 위치를 알려주는 location이 매개변수로 주어질 때, 해당 프로세스가 몇 번째로 실행되는지 return 하도록 solution 함수를 작성하는 문제이다.


문제 분류가 스택/큐이다.

파이썬에서 스택은 list, 큐는 deque이다.

큐로 접근해보자.

 

1. 현재 인덱스들과 우선순위를 한번에 묶을 수 있는 키워드인 enumerate를 사용한 deque를 선언.

    arr = deque(enumerate(priorities))

 

2. 계속 popleft를 시키면서 popleft를 시킨 프로세스의 index와 우선순위를 가져와서 any키워드를 사용해 비교한다.

(코틀린에서 유용하게 사용하는 any, 파이썬에도 있었는지 몰랐다.)

any를 사용해서 popleft시킨 프로세스의 우선순위보다 큰 경우가 있으면 다시 append()

큰 경우가 없다면 answer을 1증가하고, 처음에 입력받은 location과 popleft()한 index가 같으면 반복문 종료

    while arr:
        index, priority = arr.popleft()
        if any(priority < p for _, p in arr):
            arr.append((index, priority))
        else:
            answer += 1
            if index == location:
                break

 

any 키워드의 사용법을 다시보자.

        if any(priority < p for _, p in arr):
            arr.append((index, priority))
        else:
            answer += 1

arr은 (인덱스, 우선순위)로 이루어진 deque이다.

문제에서는 우선순위로 답이 정해지기 때문에 any키워드 안 인덱스를 언더바(_)처리를 했다.

그리고 arr안에 popleft() 한 프로세스의 우선순위보다 큰게 있다면 if문을 수행하고,

우선순위보다 큰게 없다면, else 문을 처리한다.

 

any라는 키워드를 배우게 되었다.

관련글 더보기

댓글 영역