πŸ’» DEV/γ„΄ problems

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] μŠ€νƒ/큐(Stack/Queue): ν”„λ¦°ν„°

vodkassi 2021. 5. 7. 16:17
728x90

문제 μ„€λͺ…

일반적인 ν”„λ¦°ν„°λŠ” 인쇄 μš”μ²­μ΄ λ“€μ–΄μ˜¨ μˆœμ„œλŒ€λ‘œ μΈμ‡„ν•©λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ€‘μš”ν•œ λ¬Έμ„œκ°€ λ‚˜μ€‘μ— 인쇄될 수 μžˆμŠ΅λ‹ˆλ‹€. 이런 문제λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄ μ€‘μš”λ„κ°€ 높은 λ¬Έμ„œλ₯Ό λ¨Όμ € μΈμ‡„ν•˜λŠ” ν”„λ¦°ν„°λ₯Ό κ°œλ°œν–ˆμŠ΅λ‹ˆλ‹€. 이 μƒˆλ‘­κ²Œ κ°œλ°œν•œ ν”„λ¦°ν„°λŠ” μ•„λž˜μ™€ 같은 λ°©μ‹μœΌλ‘œ 인쇄 μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

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)