[BOJ] 13335. ํŠธ๋Ÿญ(๐Ÿฅˆ, ๊ตฌํ˜„/์Šคํƒ/ํ)

lemythe423ยท2023๋…„ 7์›” 3์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
9/133
post-thumbnail

๋ฌธ์ œ

ํ’€์ด

๋Œ€๋†“๊ณ  ํ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ์•Œ๋ ค์ฃผ๋Š” ๊ตฌํ˜„ ๋ฌธ์ œ

  • ๋จผ์ € ์˜ฌ๋ผ์˜จ ํŠธ๋Ÿญ์ด ๋จผ์ € ๋‚ด๋ ค๊ฐ€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— FIFO์˜ ๋ฐฉ์‹์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ํ๋ฅผ ์‚ฌ์šฉ
  • ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ์— ์˜ฌ๋ผ์˜ค๋ฉด ๋‹ค๋ฆฌ ์œ„์˜ ํŠธ๋Ÿญ ๋ฌด๊ฒŒ ๋ณ€์ˆ˜๊ฐ’ sumW ์— ๋”ํ•ด์ฃผ๊ณ , ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ์—์„œ ๋‚ด๋ ค๊ฐ€๋ฉด ๋นผ์ฃผ๊ฒŒ ๋œ๋‹ค.
  • ์ด ๊ณผ์ •์€ ํŒŒ์ด์ฌ์˜ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ pop๊ณผ append๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ–ˆ๋‹ค. ๋‹ค๋ฆฌ ์œ„์˜ ๋ฌด๊ฒŒ์— ๋‹ค์Œ ๋ฒˆ์— ์˜ฌ๋ผ์˜ฌ ํŠธ๋Ÿญ(truck[next])์„ ์˜ฌ๋ ค๋„ L์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์˜ฌ๋ฆฐ๋‹ค(append).
  • ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์•„๋ฌด ํŠธ๋Ÿญ๋„ ์˜ฌ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค(.append(0))
  • ๊ฐ€์žฅ ์•ž์ด ํŠธ๋Ÿญ์ด๋“  ์•„๋ฌด๊ฒƒ๋„ ์•„๋‹ˆ๋“  sumW ์—์„œ ๊ฐ’์„ ๋นผ์ฃผ๋ฉด์„œ ํ์—์„œ ์ œ๊ฑฐ๋˜๋Š” ๊ณผ์ •์€ ๋งค๋ฒˆ ์ผ์–ด๋‚˜๊ฒŒ ๋œ๋‹ค
  • ์ด ๋ชจ๋“  ๊ณผ์ •์€ 1์ดˆ ๋™์•ˆ ์ผ์–ด๋‚˜๋ฉฐ time ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์‹œ๊ฐ„ ๊ณ„์‚ฐ
# ํŠธ๋Ÿญ

n, w, L = map(int, input().split())
truck = list(map(int, input().split()))

def move():
    queue = [0] * w
    sumW = time = next = 0
    while True:
        time += 1

        # ๋‹ค๋ฆฌ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ํŠธ๋Ÿญ์„ ๋‚ด๋ฆฌ๋ฉฐ ๋™์‹œ์— ๋‹ค๋ฆฌ ์œ„ ๋ฌด๊ฒŒ ์ดํ•ฉ(sumW)์—์„œ ์ œ๊ฑฐ
        # ํŠธ๋Ÿญ์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ƒฅ 0์ด ์ œ๊ฑฐ๋œ๋‹ค
        sumW -= queue.pop(0)

        # ๋‹ค์Œ ํŠธ๋Ÿญ์ด ์กด์žฌํ•œ๋‹ค๋ฉด sumW์— ๋‹ค์Œ ํŠธ๋Ÿญ์ด ์˜ฌ๋ผ์˜ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ํŒ๋‹จ
        # ์˜ฌ๋ผ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ฌด๊ฒŒ๋ฅผ ๋”ํ•ด์ฃผ๊ณ , ํŠธ๋Ÿญ์„ ๋‹ค๋ฆฌ์— ์˜ฌ๋ฆฐ๋‹ค
        # ์ด์ œ ๋‹ค๋ฆฌ์— ์˜ฌ๋ผ์˜ค์ง€ ์•Š์€ ๋‹ค์Œ ํŠธ๋Ÿญ์œผ๋กœ next๋Š” ์˜ฎ๊ฒจ๊ฐ„๋‹ค
        if next < n and sumW + (trc:=truck[next]) <= L:
            sumW += trc
            queue.append(trc)
            next += 1
        # ๋งŒ์•ฝ ์•ˆ ๋œ๋‹ค๋ฉด, ์•„๋ฌด๊ฒƒ๋„ ์˜ฌ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค(0)
        else:
            queue.append(0)

        # ๋‹ค๋ฆฌ ์œ„์— ์•„๋ฌด ํŠธ๋Ÿญ๋„ ์˜ฌ๋ผ์™€ ์žˆ์ง€ ์•Š๊ณ  ๋” ์˜ฌ๋ผ์˜ฌ ํŠธ๋Ÿญ๋„ ์—†๋‹ค๋ฉด ์ข…๋ฃŒํ•œ๋‹ค
        if not sumW and next == n:
            return time

print(move())
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€