코딩테스트 연습 - 프로세스 | 프로그래머스 스쿨 (programmers.co.kr)
문제 설명
운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리하는 것입니다. 이 문제에서는 운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로세스가 몇 번째로 실행되는지 알아내면 됩니다.
1. 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다.
2. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다.
3. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다.
3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다.
예를 들어 프로세스 4개 [A, B, C, D]가 순서대로 실행 대기 큐에 들어있고, 우선순위가 [2, 1, 3, 2]라면 [C, D, A, B] 순으로 실행하게 됩니다.
현재 실행 대기 큐(Queue)에 있는 프로세스의 중요도가 순서대로 담긴 배열 priorities와, 몇 번째로 실행되는지 알고싶은 프로세스의 위치를 알려주는 location이 매개변수로 주어질 때, 해당 프로세스가 몇 번째로 실행되는지 return 하도록 solution 함수를 작성해주세요.
제한사항
- priorities의 길이는 1 이상 100 이하입니다.
- priorities의 원소는 1 이상 9 이하의 정수입니다.
- priorities의 원소는 우선순위를 나타내며 숫자가 클 수록 우선순위가 높습니다.
- location은 0 이상 (대기 큐에 있는 프로세스 수 - 1) 이하의 값을 가집니다.
- priorities의 가장 앞에 있으면 0, 두 번째에 있으면 1 … 과 같이 표현합니다.
입출력 예 설명
예제 #1
문제에 나온 예와 같습니다.
예제 #2
6개의 프로세스 [A, B, C, D, E, F]가 대기 큐에 있고 중요도가 [1, 1, 9, 1, 1, 1] 이므로 [C, D, E, F, A, B] 순으로 실행됩니다. 따라서 A는 5번째로 실행됩니다.
문제해결중에 어려웠던 부분은
[1,1,9,1,1,1]의 리스트에서 인덱스 0에있는 숫자가 1이 몇번째에서 나올지 구현하는 과정이 필요했다
하지만 리스트에
1이 여러개가있다는게 문제해결의 어려움이였다
큐는 인덱스가 무의미한 자료형이기때문에
1의 숫자들에게 변하지않는 고유한 인덱스가 필요했다
해결방법은
튜플 자료형을 큐에넣을수있다는것을 배우고
튜플자료형에 값과 고유한 인덱스를 같이 큐에집어넣어
큐에서 팝과 푸시가 일어나도 고유한 인덱스 정보를 가지도록
구현하였다
from collections import deque
def solution(priorities,location):
# 큐 초기화
queue = deque()
answer=0
# 프로퍼티스 값과 인덱스를 튜플로 묶어 큐에 추가
for index, prop in enumerate(priorities):
queue.append((prop, index))
while queue:
current_element = queue.popleft() # 큐에서 요소를 하나 뽑음
current_priority, current_index = current_element # 요소의 프로퍼티 값과 인덱스를 가져옴
is_max = all(current_priority >= prop for prop, _ in queue) # 현재 요소가 큐의 다른 요소들보다 우선순위가 높은지 확인
if not is_max:
queue.append(current_element) # 현재 요소가 최댓값보다 작으면 큐 맨 뒤로 다시 넣음
else:
answer=answer+1
if current_index == location:
return answer
'코딩 테스트' 카테고리의 다른 글
인포뱅크 SW개발직 코딩 테스트 피드백 (1) | 2023.11.09 |
---|---|
인포뱅크 소프트웨어 개발직군 테스트(클래스 구현 과제) (0) | 2023.11.07 |