from collections import deque, Counter
def solution(priorities, location):
traget = (prioritieis[location], location)
nums = set(priorities)
table = Counter(priorities)
queue = deque([(priority, loc) for loc, priority in enumerate(priorities)])
cnt = 1
while True :
if queue[0][0] == max(nums) and queue[0] != target:
printed = queue.popleft()[0]
cnt += 1
table[printed] -= 1
if table[printed] == 0:
nums.remove(printed)
elif queue[0][0] == max(nums) and queue[0] == target:
return cnt
else :
queue.append(queue.popleft())
스택/큐 알고리즘을 공부한 직후에 풀었더니, 생각을 깊이 하지 않고 기계적으로 푼 것 같은 느낌이 들었다.
비효율적인 부분이 여럿 있다.
popleft
이후 if로 나뉘어지는 상황에 대응하면 되는 것이었다.from collections import deque, Counter
def solution(priorities, location):
nums = set(priorities)
table = Counter(priorities)
queue = deque([(priority, loc) for loc, priority in enumerate(priorities)])
cnt = 1
while True :
cur = queue.popleft() #우선 첫 번째 요소를 뽑아내었다.
if cur[0] == max(nums) :
if cur[1] != location:
cnt += 1
table[cur[0]] -= 1
if table[cur[0]] == 0:
nums.remove(cur[0])
else : # 분기를 나누었다.
return cnt
else :
queue.append(cur)
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
any
부분을 기억하고 싶어서 갖고 왔다.
아마 연산 속도에서는 내가 짠 코드가 더 빠를 것으로 예상되나 (확실하진 않다😅)
any
를 쓰니 너~무 코드가 이뻐서 기억하고 싶다.