Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 20055. ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์˜ ๋กœ๋ด‡

deo2kim 2021. 10. 4. 16:53
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

  • ํšŒ์ „์€ deque ์˜ rotate ๋ฉ”์†Œ๋“œ ์ด์šฉ
  • ๋‚ด๊ตฌ๋„ ๋ฆฌ์ŠคํŠธ, ๋ฒจํŠธ ์œ„์˜ ๋กœ๋ด‡ ๋ฆฌ์ŠคํŠธ
  • ์ฃผ์–ด์ง„ ์ง€๋ฌธ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.

์‹œ๊ฐ„์ดˆ๊ณผ ๋•Œ๋ฌธ์— ๊ณ ์ƒํ–ˆ๋˜ ๋ฌธ์ œ

๋ฒจํŠธ์˜ ๋งจ ๋์— ๋กœ๋ด‡์ด ์˜ค๋ฉด ํ•ญ์ƒ ๋‚ด๋ ค์ค˜์•ผํ•œ๋‹ค.

 

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

import sys
from collections import deque
input = sys.stdin.readline

N, K = map(int, input().split())
belt = deque(map(int, input().split()))
robots = deque([0]*N)

cnt = 0
while True:
    cnt += 1
    # 1. ๋ฒจํŠธ ํšŒ์ „
    belt.rotate()
    robots.rotate()

    # ๋‚ด๋ฆฌ๋Š” ์œ„์น˜์— ๋กœ๋ด‡์ด ์žˆ๋‹ค๋ฉด ๋‚ด๋ฆฐ๋‹ค.
    robots[-1] = 0

    # 2. ๋ฒจํŠธ์œ„์—์„œ ๋กœ๋ด‡ ์ด๋™
    if 1 in robots:
        for i in range(N-1, 0, -1): # ๋์—์„œ๋ถ€ํ„ฐ ํ™•์ธ
            if not robots[i] and robots[i-1] and belt[i] > 0:
                # ํ˜„์žฌ ์นธ ๋กœ๋ด‡์ด ์—†๊ณ ,
                # ์•ž ์นธ์˜ ๋ฒจํŠธ ์œ„์— ๋กœ๋ด‡์ด ์žˆ๊ณ ,
                # ํ˜„์žฌ ์นธ ๋‚ด๊ตฌ๋„๊ฐ€ 1์ด์ƒ์ผ ๋•Œ ์˜ฎ๊ธฐ๊ธฐ
                belt[i] -= 1  # ๋‚ด๊ตฌ๋„ ๊น๊ณ 
                robots[i] = 1 # ๋กœ๋ด‡ O
                robots[i-1] = 0

    # ๋‚ด๋ฆฌ๋Š” ์œ„์น˜์— ๋กœ๋ด‡์ด ์žˆ๋‹ค๋ฉด ๋‚ด๋ฆฐ๋‹ค.
    robots[-1] = 0

    # 3. ์˜ฌ๋ฆฌ๋Š” ์œ„์น˜์— ์žˆ๋Š” ์นธ์˜ ๋‚ด๊ตฌ๋„๊ฐ€ 0์ด ์•„๋‹ˆ๋ผ๋ฉด ์˜ฌ๋ฆฌ๋Š” ์œ„์น˜์— ๋กœ๋ด‡ ์˜ฌ๋ฆฐ๋‹ค.
    if belt[0] > 0 and not robots[0]:
        belt[0] -= 1
        robots[0] = 1
    # 4. ๋‚ด๊ตฌ๋„๊ฐ€ 0์ธ ์นธ์˜ ๊ฐœ์ˆ˜๊ฐ€ K๊ฐœ ์ด์ƒ์ด๋ฉด ๊ณผ์ • ์ข…๋ฃŒ
    if belt.count(0) >= K:
        print(cnt)
        break

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

 

 

๋ฐ˜์‘ํ˜•