728x90
문제
코드
from collections import deque
def solution(priorities, location):
cnt = 0
priorities = deque(priorities)
prioritie1 = deque([0]*len(priorities))
prioritie1[location] = 1
while(1):
if(len(priorities) == 1):
cnt += 1
break
else:
num = priorities.popleft()
num1 = prioritie1.popleft()
if(num >= max(priorities)):
cnt += 1
if(num1 == 1):
break
else:
priorities.append(num)
prioritie1.append(num1)
return cnt
코드풀이
"스택/큐" 분야의 문제였다.
배열의 첫 번째 숫자를 뽑고 그 숫자의 우선도가 가장 크거나 같다면 출력하고 아니면
다시 배열 뒤로 붙여야 한다.
나는 deque 를 사용하여 popleft() 를 사용했다. 물론 그냥 pop(0) 을 사용해도 되지만 왠지 모르게 그렇게 했다.
여기서 주의할 점은 두 가지 였다.
(1) 반복문을 돌릴 때 길이를 배열의 길이로 두면 안된다는 점.
(2) 마지막 배열의 길이가 1이 될 수 있다는 점.
이 두가지만 고치고 간다면 수월하게 해결할 수 있다.
나는 주어진 숫자를 num에 넣었고, num1은 내가 원하는 출력물인지 알기 위해 만들었다.
그래서 num1 == 1 이라면 내가 원하는 출력물 이므로 break!
300x250