[알고리즘] 프로그래머스 프로세스 파이썬

SCY·2023년 9월 7일
0

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

✅ 문제

✅ 나의 풀이

  • 원하는 프로세스가 큐 내에서 빠져나오기 전까지 문제에서 주어진 조건을 충실히 수행한다.
  • 프로세스가 완전히 빠져나왔다면 answer를 1 증가시킴으로써 순서를 파악한다.
from collections import deque

def solution(priorities, location):
    answer = 0
    
    queue = deque(priorities)
    names = deque()
    for i in range(len(queue)) :
        names.append(chr(ord('A')+i))
    alp = names[location]
    
    while alp in names :
        back = False
        x = queue.popleft()
        y = names.popleft()
        for q in queue :
            if x < q :
                queue.append(x)
                names.append(y)
                back = True
                break
        if back == False :
            answer += 1
    return answer
  • queue 구현의 경우 dequepop()listpop(0)보다 빠름

✅ 다른 풀이

def solution(priorities, location):
    queue =  [(i,p) for i,p in enumerate(priorities)]
    answer = 0
    while True:
        cur = queue.pop(0)
        if any(cur[1] < q[1] for q in queue):
            queue.append(cur)
        else:
            answer += 1
            if cur[0] == location:
                return answer
  • enumerate()를 통해 (index, process) 형태의 튜플 리스트 생성
  • any()를 통해 큐 내에 더 높은 우선순위의 프로세스 존재하는지 파악 가능
  • 추가로 any() 대신 max() 사용도 가능

✅ 얻어가기

any/all()

파라미터는 iterable한 객체 삽입

  • any() : 하나라도 True라면 True 반환
  • all() : 모두 True면 True 반환

enumerate()

for k, v in enumerate(['A', 'B', 'C']) :
	print(k, v)
for entry in enumerate(['A', 'B', 'C']) :
	print(entry)

k와 v는 각각의 값을 반환하고, entry는 튜플로 묶여 반환된다.

for entry in enumerate(['A', 'B', 'C'], start=101) :
	print(entry)

index의 시작 값 변경 가능하다.

for-else & while-else

>>> for x in [1, 2, 3, 4]:
...     print(x)
... else:
...     print("끝")
... 
1
2
3
4

for문 loop를 모두 돌린 후 else 구문이 실행된다.

>>> for x in [1, 2, 3, 4]:
...     if x % 3:
...         print(x)
...     else:
...         break
... else:
...     print("끝")
... 
1
2

break가 존재하는 경우 else 구문은 실행되지 않는다.
추가로 while-elsefor-else와 같다.

profile
성장 중독 | 서버, 데이터, 정보 보안을 공부합니다.

0개의 댓글