DonHurry

[Python] ๋ฐฑ์ค€ 13335๋ฒˆ - ํŠธ๋Ÿญ ๋ณธ๋ฌธ

Problem Solving

[Python] ๋ฐฑ์ค€ 13335๋ฒˆ - ํŠธ๋Ÿญ

_๋„๋… 2022. 11. 6. 22:22

๐Ÿ“– ๋ฌธ์ œ

 

13335๋ฒˆ: ํŠธ๋Ÿญ

์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋Š” ํ‘œ์ค€์ž…๋ ฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ž…๋ ฅ์€ ๋‘ ์ค„๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ์ž…๋ ฅ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์„ธ ๊ฐœ์˜ ์ •์ˆ˜ n (1 ≤ n ≤ 1,000) , w (1 ≤ w ≤ 100) and L (10 ≤ L ≤ 1,000)์ด ์ฃผ์–ด์ง€๋Š”๋ฐ, n์€ ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋Š” ํŠธ

www.acmicpc.net

 

๐Ÿ”Ž ํ’€์ด

ํ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ‘ธ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

์ดˆ๊ธฐ ๋ฆฌ์ŠคํŠธ์—๋Š” ๋‹ค๋ฆฌ ์œ„ ๊ณต๊ฐ„์„ ๋ชจ๋‘ 0์œผ๋กœ ์ฑ„์›Œ์ค๋‹ˆ๋‹ค. ์ด๋•Œ ๋งค๋ฒˆ ๋ฆฌ์ŠคํŠธ ํ•ฉ์„ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฌด๊ฒŒ๋ฅผ ๊ตฌํ•˜๋ฉด ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ ์œ„๋กœ ์ง„์ž…ํ•˜๋ฉด ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋ฅผ ๋”ํ•ด์ฃผ๊ณ , ๋‚˜๊ฐ€๋ฉด ๋นผ์ค๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํŠธ๋Ÿญ์ด ๋” ์ด์ƒ ๋‹ค๋ฆฌ์— ์ง„์ž…ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฆฌ์ŠคํŠธ์— 0์„ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

 

๐Ÿ’ป ์ฝ”๋“œ

import sys
import collections
input = sys.stdin.readline

n, w, L = map(int, input().split())
truck = list(map(int, input().split()))
# ํŠธ๋Ÿญ์ด ์—†๋Š” ๊ฒฝ์šฐ 0์œผ๋กœ ์ฑ„์šฐ๊ธฐ
bridge = collections.deque([0] * w)
# ๋‹ค๋ฆฌ ์œ„ ๋ฌด๊ฒŒ ํ•ฉ
sum_weight = 0
# ํŠธ๋Ÿญ index
id = 0
cnt = 0
# ํ†ต๊ณผํ•œ ํŠธ๋Ÿญ
pass_truck = 0

while (pass_truck != n):
    cnt += 1
    # ์„ ์ž…์„ ์ถœ ๊ตฌ์กฐ์ธ ํ๋ฅผ ์ด์šฉ
    p_truck = bridge.popleft()
    # ๊ฐ’์ด 0์ด ์•„๋‹Œ ๊ฒฝ์šฐ ํŠธ๋Ÿญ์ด๋ฏ€๋กœ ํ†ต๊ณผํ•œ ํŠธ๋Ÿญ ์ฆ๊ฐ€
    if p_truck: pass_truck += 1
    # ํ†ต๊ณผํ•œ ํŠธ๋Ÿญ์€ ๋‹ค๋ฆฌ ์œ„ ๋ฌด๊ฒŒ์—์„œ ์ฐจ๊ฐ (ํŠธ๋Ÿญ์ด ์•„๋‹Œ ๊ฒฝ์šฐ 0์ด๊ธฐ์— ๊ฐ’ ๋ณ€ํ™” ์—†์Œ)
    sum_weight -= p_truck
    
    # ๋‹ค๋ฆฌ ์œ„ ๋ฌด๊ฒŒ์™€ ์ง€๋‚˜๊ฐˆ ํŠธ๋Ÿญ ๋ฌด๊ฒŒ์˜ ํ•ฉ์ด L๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ
    if id < n and sum_weight + truck[id] <= L:
        bridge.append(truck[id])
        sum_weight += truck[id]
        id += 1
    # ์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ๋นˆ ๊ณต๊ฐ„์ธ 0 ์ถ”๊ฐ€
    else:
        bridge.append(0)

print(cnt)