새소식

반응형
코딩 테스트

[프로그래머스] 프로세스

  • -
728x90
반응형

문제

  • 특정 프로세스가 몇 번째로 실행되는지 알아내기
  • 프로세스 실행 규칙
    • 실행 대기 큐에서 대기중인 프로세스 꺼내기
    • 큐에 대기 중인 큐 중에서 우선순위가 더 높은 프로세스 있으면, 꺼낸 프로세스 큐에 다시 넣기
    • 없으면 해당 프로세스 실행하기 
  • 1 <= 프로세스 개수 <= 100
  • 1 <= 우선순위 숫자 <= 9

 

풀이

  • 시간 복잡도 : 프로세스 개수가 100개이므로 대부분의 알고리즘 사용 가능하다.
  • 실행해야 될 우선 순위 별로 정렬하고, 순서대로 실행하다가 원하는 위치가 나오면 출력하기
    • 각 우선순위 별 프로세스의 개수를 기록해서, 그 개수만큼 프로세스 실행 될 때까지 계속 큐 돌리기

 

 

from collections import deque

def solution(priorities, location):
    prior_cnt = [0]*10    		# 중요도 별 프로세스 개수
    process = deque([])         	# 프로세스 순서와 중요도를 묶어서 저장
    for i, p in enumerate(priorities):
        process.append((i, p))
        prior_cnt[p] += 1
    
    answer = 0   	# 정답 변수
    # 실행해야 할 우선순위 별로 정렬
    for p in sorted(list(set(priorities)), reverse=True) :
        while prior_cnt[p] > 0 :
            i, now_p = process.popleft()
            
            # 현재 프로세스를 실행할 수 있으면
            if now_p == p :     
                answer += 1
                prior_cnt[p] -= 1
                if i == location :   # 원하는 위치라면 출력하기
                    return answer
            else:
                process.append((i, now_p))

 

References

  • 프로그래머스 고득점 Kit 프로세스
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.