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
와 같다.