일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- C#프로그래밍
- 자바
- 변수
- 자바클래스
- SWEA파이썬
- 디자인패턴
- 코드업100제자바
- SWEA
- C#변수
- Algorithm
- 개발입문
- 제어구조
- 자바연산자
- 기초프로그래밍
- 알고리즘
- 수학연산
- 코드업자바
- 프로그래머스파이썬
- VARIABLE
- Codeup
- c#
- 백준파이썬
- 코딩테스트
- 코드업
- 코드업100제
- Literal
- 리터럴
- 백준
- Java
- 사용자입력
- Today
- Total
제니노트
[프로그래머스] 프로세스 (python) 본문
1) [프로그래머스] 프로세스 (python)
문제 출처 :
https://school.programmers.co.kr/learn/courses/30/lessons/42587
2) 문제
문제 설명
운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리하는 것입니다. 이 문제에서는 운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로세스가 몇 번째로 실행되는지 알아내면 됩니다.
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 … 과 같이 표현합니다.
[2, 1, 3, 2] | 2 | 1 |
[1, 1, 9, 1, 1, 1] | 0 | 5 |
큐를 구현하는 것이 목표.
properties 요소를 이용하여 queue라는 새로운 리스트를 만든다.
enumerate(properties)는 properties 리스트 요소에 인덱스를 넣어주는 함수이다
예를 들어 properties가 ['a','b','c']라면, emnuerate(properties)의 결과는 [(0,'a'),(1,'b'),(2,'c')] 가 된다.
이를 리스트 컴프리헨션으로 (i,p) for i,p in enumerate(properties) (여기서 i는 index고 p는 리스트의 각 요소를 가르킨다.)
각각의 (i,p) 튜플을 새로운 리스트인 queue의 요소로 추가해준다.
properties= [2,1,3,2]라면
따라서 queue=[(0,2),(1,1),(2,3),(3,2)] (이중리스트꼴)이 된다.
answer = 0
while True : cur = queue.pop(0) 일 때 (0,2)가 pop
if any(cur[1]<q[1] for q in queue) :
로 들어가는데
(2<1, 2<3, 2<2)
결과 true true false 이다.
any() 함수 인자로 받은 이터러블(여기서는 조건식,반복할수 있는 객체, 여러 개의 값을 가지는 자료형,컨테이너(자료형에 상관없이 저장이 가능한 객체)의 요소 중에서 하나라도 참인지 검사하여 결과를 반환한다.
모든 요소가 거짓이면 false를 반환한다.
그 후 현재 프로세스를 우선순위가 높은 다른 프로세스 뒤에 배치하여서 처리순서를 조정한다.
만약 큰 우선순위를 가진 프로세스가 없다면 answer 에 1을 더해주고 원하는 인덱스와 일치하면 answer을 return 한다.
예를 들어 properties가 [2,1,3,2] location 2 의 예시로 동작과정을 설명하면
queue=[(0,2),(1,1),(2,3),(3,2)]
cur = (0,2)
any 함수에서 2<1 2<3 2<2 = True
queue = [(1,1),(2,3),(3,2),(0,2)]
cur = (1,1)
1<3 1<2 1<2 True
queue = [(2,3),(3,2),(0,2),(1,1)]
cur (2,3)
3<2 3<2 3<1 : False
answer = 1
cur[1] = 2 location = 1 return 1이 되는 것이다.
슈도코드
함수 solution(priorties,location) :
큐를 초기화하고 우선순위와 인덱스로 채우기(queue:(i,p) for i,p in enumerate(priorties)])
반환 변수 지정 초기화
무한 반복 :
현재 작업 큐에서 가져오기 (cur = queue.pop(0))
만약 큐에 있는 작업들 중 현재 작업보다 우선순위가 높은 작업이 있다면 :
현재 작업을 큐의 맨 뒤로 보내기 (queue.append(cur))
그렇지 않으면 :
정답에 1더해주기
만약 현재 작업의 인덱스가 원하는 위치와 같다면 :
정답 반환
3)소스 코드
import sys
def solution(properties,location) :
#enumerate() : 이넥스와 값을 함께 반환
#enumerate(properties) : properties 리스트의 각 요소에 대해 인덱스와 값을 반환
#리스트 컴프리헨션 : [표현식 for 항목 in 반복가능객체 if 조건(선택사항)]
#enumerate(properties) 는 반복 가능한 객체
#(i,p)라는 튜플 생성 이를 리스트에 추가
# i : enumerate(properties) : 반환된 요소의 인덱스 나타냄
# p : properties 의 리스트의 각 요소를 나타냄
# properties가 [10,20,30]으로 주어지면 '(0,10)','(1,20)' ,,, 튜플 반환
# 각 반환된 튜플은 '(i,p)' 형태로 리스트 컴프리헨션에 의해 생성된다
# 따라서 queue 리스트는 [(0,10),(1,20),(2,30)] 이 된다.
queue = [(i,p) for i,p in enumerate(properties)]
answer = 0
while True :
cur = queue.pop(0)
#any() : list의 원소를 필터링하거나 조건 검사할 때 사용하는 함수
#queue 모든 튜플을 순회하면서 순회 중 튜플의 우선순위가 현재 프로세스에서 pop한 cur 튜플의
#우선순위보다 큰지 확인
#조건을 만족하면 queue에 현재 프로세스를 다시 집어넣기
if any(cur[1] <q[1] for q in queue) :
queue.append(cur)
else :
answer += 1
if cur[0] == location :
return answer
TIL
1. 큐 : 먼저 들어온 데이터가 먼저 처리되는 FIFO 구조, 여기선 queue 리스트를 큐로 활용
queue.pop() 를 통해 가장 먼저 들어온 작업 처리
2.any() : 함수인자로 받은 이터러블,조건식의 요소 중에서 하나라도 참인지 검사하여 결과 반환.
조건이 참인 요소가 하나라도 있다면 True
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 하노이탑 (python) (0) | 2023.07.25 |
---|---|
[프로그래머스] 다리를 지나는 트럭 (python) (0) | 2023.06.30 |
[프로그래머스] 올바른 괄호 (python) (0) | 2023.06.09 |
[프로그래머스] 기능개발 (python) (0) | 2023.05.31 |
[프로그래머스] 같은 숫자는 싫어 (python) (0) | 2023.05.23 |