

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 구현의 경우 deque의 pop()이 list의 pop(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-else도 for-else와 같다.