안녕하세요.
이번 세 번째 글도 스택/큐 문제인 "프로세스"입니다.
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42587
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
👉 이 문제를 저는 큐(FIFO)를 이용해서 풀었습니다.
🔍 제가 짠 코드를 설명하자면,
1. 먼저 Linked List 기반의 Queue 인 deque를 import 해서 가져옵니다.
2. priorities를 deque로 형태로 바꿔줍니다.
3. while문을 돌면서 해당 location의 프로세스가 몇 번째로 실행되는지 확인합니다.
- queue에서 가장 큰 값(= 우선순위가 가장 높은 값)을 m 변수에 저장합니다.
- queue의 데이터를 꺼내고 dq 변수에 저장합니다.
- queue에서 데이터를 꺼내서 길이가 1 줄어들었으므로 location 값 또한 -1 합니다.
- dq와 m의 값이 같지 않다면 queue의 마지막에 다시 꺼낸 값을 넣습니다.
- 그리고 location 값이 0 보다 작다면, 구하고자 하는 프로세스의 위치가 마지막으로 이동한 것이므로 len(queue) - 1을 합니다.
- dq와 m의 값이 같다면 프로세스 하나를 실행했으므로 answer 값을 +1 합니다.
4. while문을 빠져나온 후 마지막으로 answer 값을 반환합니다.
from collections import deque
def solution(priorities, location):
answer = 0
queue = deque(priorities)
while queue:
m = max(queue)
dq = queue.popleft()
location -= 1
if dq != m:
queue.append(dq)
if location < 0:
location = len(queue) - 1
else:
answer += 1
if location < 0:
break
return answer'코딩테스트 연습' 카테고리의 다른 글
| [프로그래머스/Python] Lv. 2 이진 변환 반복하기 (0) | 2023.07.20 |
|---|---|
| [프로그래머스/Python] Lv. 2 최솟값 만들기 (0) | 2023.07.11 |
| [프로그래머스/Python] Lv. 2 JadenCase 문자열 만들기 (0) | 2023.07.09 |
| [프로그래머스/Python] Lv. 2 올바른 괄호 (0) | 2023.06.25 |
| [프로그래머스/Python] Lv. 2 기능개발 (0) | 2023.06.22 |