[νλ‘κ·Έλλ¨Έμ€] μ€ν/ν(Stack/Queue): νλ¦°ν°
λ¬Έμ μ€λͺ
μΌλ°μ μΈ νλ¦°ν°λ μΈμ μμ²μ΄ λ€μ΄μ¨ μμλλ‘ μΈμν©λλ€. κ·Έλ κΈ° λλ¬Έμ μ€μν λ¬Έμκ° λμ€μ μΈμλ μ μμ΅λλ€. μ΄λ° λ¬Έμ λ₯Ό 보μνκΈ° μν΄ μ€μλκ° λμ λ¬Έμλ₯Ό λ¨Όμ μΈμνλ νλ¦°ν°λ₯Ό κ°λ°νμ΅λλ€. μ΄ μλ‘κ² κ°λ°ν νλ¦°ν°λ μλμ κ°μ λ°©μμΌλ‘ μΈμ μμ
μ μνν©λλ€.
1. μΈμ λκΈ°λͺ©λ‘μ κ°μ₯ μμ μλ λ¬Έμ(J)λ₯Ό λκΈ°λͺ©λ‘μμ κΊΌλ
λλ€.
2. λλ¨Έμ§ μΈμ λκΈ°λͺ©λ‘μμ Jλ³΄λ€ μ€μλκ° λμ λ¬Έμκ° ν κ°λΌλ μ‘΄μ¬νλ©΄ Jλ₯Ό λκΈ°λͺ©λ‘μ κ°μ₯ λ§μ§λ§μ λ£μ΅λλ€.
3. κ·Έλ μ§ μμΌλ©΄ Jλ₯Ό μΈμν©λλ€.
μλ₯Ό λ€μ΄, 4κ°μ λ¬Έμ(A, B, C, D)κ° μμλλ‘ μΈμ λκΈ°λͺ©λ‘μ μκ³ μ€μλκ° 2 1 3 2 λΌλ©΄ C D A B μμΌλ‘ μΈμνκ² λ©λλ€. λ΄κ° μΈμλ₯Ό μμ²ν λ¬Έμκ° λͺ λ²μ§Έλ‘ μΈμλλμ§ μκ³ μΆμ΅λλ€. μμ μμμ Cλ 1λ²μ§Έλ‘, Aλ 3λ²μ§Έλ‘ μΈμλ©λλ€. νμ¬ λκΈ°λͺ©λ‘μ μλ λ¬Έμμ μ€μλκ° μμλλ‘ λ΄κΈ΄ λ°°μ΄ prioritiesμ λ΄κ° μΈμλ₯Ό μμ²ν λ¬Έμκ° νμ¬ λκΈ°λͺ©λ‘μ μ΄λ€ μμΉμ μλμ§λ₯Ό μλ €μ£Όλ locationμ΄ λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, λ΄κ° μΈμλ₯Ό μμ²ν λ¬Έμκ° λͺ λ²μ§Έλ‘ μΈμλλμ§ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ ν μ¬ν
- νμ¬ λκΈ°λͺ©λ‘μλ 1κ° μ΄μ 100κ° μ΄νμ λ¬Έμκ° μμ΅λλ€.
- μΈμ μμ
μ μ€μλλ 1~9λ‘ νννλ©° μ«μκ° ν΄μλ‘ μ€μνλ€λ λ»μ
λλ€.
- locationμ 0 μ΄μ (νμ¬ λκΈ°λͺ©λ‘μ μλ μμ
μ - 1) μ΄νμ κ°μ κ°μ§λ©° λκΈ°λͺ©λ‘μ κ°μ₯ μμ μμΌλ©΄ 0, λ λ²μ§Έμ μμΌλ©΄ 1λ‘ ννν©λλ€.
μ μΆλ ₯ μ
Priorities | Location | Return |
[2,1,3,2] | 2 | 1 |
[1,1,9,1,1,1] | 0 | 5 |
μ
μΆλ ₯ μ μ€λͺ
- μ
μΆλ ₯ μ #2
* 6κ°μ λ¬Έμ(A, B, C, D, E, F)κ° μΈμ λκΈ°λͺ©λ‘μ μκ³ μ€μλκ° 1 1 9 1 1 1 μ΄λ―λ‘ C D E F A B μμΌλ‘ μΈμν©λλ€.
λμ μ루μ
from collections import deque
def solution(priorities, location):
priorities = [ [p, i] for (i, p) in enumerate(priorities)]
queue = deque(priorities)
while True:
queue.rotate(-queue.index(max(queue, key=lambda x:x[0])))
if queue[0][1] == location:
queue.popleft()
break
else:
queue.popleft()
return len(priorities) - len(queue)