๐Ÿงฉ Algorithm/[Programmers] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณ ๋“์  KIT

[Programmers/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณ ๋“์  KIT] ํ”„๋กœ์„ธ์Šค

devCloud 2026. 4. 7. 10:15
728x90

[Programmers] ํ”„๋กœ์„ธ์Šค

Level 2 | #Queue #์ž๋ฃŒ๊ตฌ์กฐ

1. ๋ฌธ์ œ ์š”์•ฝ ๋ฐ ๋กœ์ง

ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋  ์ฐจ๋ก€์ผ ๋•Œ, ํ์— ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ํ์˜ ๋์œผ๋กœ ๋ณด๋‚ด๋Š” ๋ฌธ์ œ์ด๋‹ค.

  • Queue ํ™œ์šฉ: deque๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ธ๋ฑ์Šค์™€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ํŠœํ”Œ๋กœ ์ €์žฅํ•œ๋‹ค.
  • ์šฐ์„ ์ˆœ์œ„ ๋น„๊ต: ํ˜„์žฌ ๊บผ๋‚ธ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ๋†’์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋Š”์ง€ ๋งค๋ฒˆ ํ™•์ธํ•œ๋‹ค.
  • ์‹คํ–‰ ์ˆœ์„œ: ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์—†๋‹ค๋ฉด ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ณ  ์นด์šดํŠธ๋ฅผ ์˜ฌ๋ฆฐ๋‹ค.

2. ๋ฆฌํŒฉํ† ๋ง ์ฝ”๋“œ (Python)

from collections import deque

def solution(priorities, location):
    # 1. ์ธ๋ฑ์Šค์™€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ํ์— ๋‹ด๊ธฐ
    queue = deque(enumerate(priorities))
    answer = 0
    
    while queue:
        idx, priority = queue.popleft()
        
        # 2. any()๋ฅผ ํ™œ์šฉํ•ด ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ (Short-circuit)
        if any(priority < p for _, p in queue):
            queue.append((idx, priority))
        else:
            # 3. ์‹คํ–‰ ์ฒ˜๋ฆฌ ๋ฐ ์นด์šดํŠธ ์ฆ๊ฐ€
            answer += 1
            # ์ฐพ๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ผ๋ฉด ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
            if idx == location:
                return answer

3. ๐Ÿš€ ๋ฆฌํŒฉํ† ๋ง ํฌ์ธํŠธ: ์™œ ๋” ์ข‹์•„์กŒ๋‚˜?

โœ” O(n) ํƒ์ƒ‰ ๋น„์šฉ ์ œ๊ฑฐ์™€ any()์˜ ํ™œ์šฉ

๊ธฐ์กด์˜ if (index, current) not in queue ๋ฐฉ์‹์€ ๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค ํ ์ „์ฒด๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ’์„ ์ฐพ์•„์•ผ ํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ์ƒ ๋ถˆ๋ฆฌํ–ˆ๋‹ค. ๋ฆฌํŒฉํ† ๋ง์—์„œ๋Š” any()๋ฅผ ๋„์ž…ํ•˜์—ฌ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ฆ‰์‹œ ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•˜๋„๋ก ๊ฐœ์„ ํ–ˆ๋‹ค. ๋ณ„๋„์˜ Flag ๋ณ€์ˆ˜ ์—†์ด๋„ ๊ฐ€๋…์„ฑ ์žˆ๊ฒŒ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.


โœ” ํšจ์œจ์ ์ธ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜

์ด์ „์—๋Š” ๋ชจ๋“  ์‹คํ–‰ ์ˆœ์„œ๋ฅผ answer ๋ฆฌ์ŠคํŠธ์— ๋‹ด์€ ๋’ค ๋‹ค์‹œ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ๋Š” ๋ฒˆ๊ฑฐ๋กœ์šด ๊ณผ์ •์„ ๊ฑฐ์ณค๋‹ค. ๊ฐœ์„ ๋œ ์ฝ”๋“œ์—์„œ๋Š” ์นด์šดํ„ฐ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ฆ‰์‹œ ์ฒดํฌํ•˜๊ณ , location์— ๋„๋‹ฌํ•˜๋ฉด ๋ฐ”๋กœ return ํ•˜๋„๋ก ์ตœ์ ํ™”ํ–ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ์„ ๋ง‰๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•„๋‚„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

4. โœ๏ธ ํšŒ๊ณ : ์ง๊ด€๊ณผ ์„ฑ๋Šฅ ์‚ฌ์ด

๋ฌธ์ œ๋ฅผ ์ฒ˜์Œ ํ’€ ๋•Œ๋Š” ๋กœ์ง์„ ์‹œ๊ฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ์ŠคํŠธ์— ๊ฒฐ๊ณผ๋ฅผ ๋‹ด๋Š” ๋ฐฉ์‹์„ ํƒํ–ˆ์ง€๋งŒ, ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•ด ์–ธ์–ด์˜ ๋‚ด์žฅ ํ•จ์ˆ˜(any)์™€ ์กฐ๊ธฐ ๋ฐ˜ํ™˜(Early Return)์„ ์ ์ ˆํžˆ ์„ž์–ด ์“ฐ๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š”์ง€ ์ฒด๊ฐํ–ˆ๋‹ค.

ํŠนํžˆ "๋‚ด๊ฐ€ ์ฐพ๊ณ ์ž ํ•˜๋Š” ์ •๋ณด๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€"์— ์ง‘์ค‘ํ•˜๋‹ˆ ๋ถˆํ•„์š”ํ•œ ์ „์ฒด ์ˆœํšŒ๋‚˜ ์ถ”๊ฐ€ ์ž๋ฃŒ๊ตฌ์กฐ ์„ ์–ธ์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

728x90