๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/๋ฐฑ์ค€(BOJ)

[ ํŒŒ์ด์ฌ(python) ] ๋ฐฑ์ค€ 13335 - ํŠธ๋Ÿญ

by YWTechIT 2021. 6. 25.
728x90

๐Ÿ“ ๋ฐฑ์ค€ 13335 - ํŠธ๋Ÿญ

๋ฐฑ์ค€ 13335 - ํŠธ๋Ÿญ


โšก๏ธ ๋‚˜์˜ ํ’€์ด

๋ฌธ์ œ ๋ถ„๋ฅ˜๋Š” ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด์—ˆ๋Š”๋ฐ ์‹ค์ œ๋กœ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ์ผ์„ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ ํ•˜๋‹ˆ๊นŒ ํฅ๋ฏธ๋กœ์› ๋‹ค. ๋˜, ์‹ค๋ฒ„ 1์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ฌธ์ œ๊ฐ€ ์–ด๋ ค์› ๋Š”๋ฐ ๊ตฌํ˜„ ์กฐ๊ฑด์ด ์ƒ๊ฐ๋ณด๋‹ค ๊นŒ๋‹ค๋กœ์› ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋ฌธ์ œํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

  1. ํ˜„์žฌ ๋‹ค๋ฆฌ(bridge)๋ฌด๊ฒŒ + ๋„˜์–ด ์˜ฌ ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๊ฐ€ ๋‹ค๋ฆฌ ํ•˜์ค‘๋ณด๋‹ค ์ž‘์œผ๋ฉด ๋„˜์–ด ์˜ฌ ์ˆ˜ ์žˆ๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋„˜์–ด ์˜ฌ ์ˆ˜ ์—†๋‹ค.
  2. ๋‹ค๋ฆฌ๊ธธ์ด๋ฅผ ์ง€๋‚œ ํŠธ๋Ÿญ์€ ๋‹ค๋ฆฌ๋ฅผ ๋ฒ—์–ด๋‚œ๋‹ค.(pop) ์ด๋•Œ, ํ˜„์žฌ ๋‹ค๋ฆฌ๋ฌด๊ฒŒ๋Š” ๋ฐฉ๊ธˆ ๋‹ค๋ฆฌ๋ฅผ ๋ฒ—์–ด๋‚œ ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋ฅผ ๋นผ์ค˜์•ผ ํ•œ๋‹ค.
  3. ๋‹ค๋ฆฌ์— ํŠธ๋Ÿญ์ด ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

 

1๋ฒˆ ์กฐ๊ฑด์€ ์ž˜ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ 2๋ฒˆ ์กฐ๊ฑด์—์„œ ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๊ฐ€๊ณ  ๋‚˜์„œ ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋งŒํผ ํ˜„์žฌ weight๋ฅผ ๋นผ์ค„ ์ƒ๊ฐ์„ ๋ชปํ•ด์„œ ์˜ค๋‹ตํŒ์ •์„ ๋ฐ›์•˜๋‹ค. ๋˜ํ•œ if trucks: ์กฐ๊ฑด์„ ๊ฑธ์–ด๋†”์•ผ bridge๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋Š”๋ฐ ํ•ด๋‹น ์กฐ๊ฑด๋ฌธ์„ ๋„ฃ์–ด์ฃผ์ง€ ์•Š์•„ index์˜ค๋ฅ˜๊ฐ€ ์ž๊พธ ๋‚ฌ๋‹ค.

 

๋‹ค๋ฅธ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ๋ณด๋‹ˆ๊นŒ ๋‚ด๊ฐ€ ์ฒ˜์Œ ์‹œ๋„ํ•œ ๋ฐฉ์‹์œผ๋กœ ํ’€์—ˆ๋Š”๋ฐ, ๋‹ต์ด ์ž๊พธ ์•ˆ๋‚˜์˜จ ์ด์œ ๊ฐ€ ๊ฐ„๋‹จํ•œ ์กฐ๊ฑด๋ฌธ์„ ์ถ”๊ฐ€ํ•ด์ฃผ์ง€ ์•Š์•„์„œ์˜€๋‹ค. ์กฐ๊ฑด์„ ๋” ๋”ฐ์ ธ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ๊ธธ๋Ÿฌ์•ผ๊ฒ ๋‹ค.

 

# ๋‚˜์˜ ์ฝ”๋“œ
n, w, l = map(int, input().split())
trucks = list(map(int, input().split()))

bridge = [0] * w    # w๋งŒํผ ๋‹ค๋ฆฌ ๊ธธ์ด ์„ ์–ธ
weight, time = 0, 0    # ํ˜„์žฌ ๋‹ค๋ฆฌ์œ„์˜ ๋ฌด๊ฒŒ, ์‹œ๊ฐ„ ์„ ์–ธ

while True:
    out = bridge.pop(0)    # ๋ฐฉ๊ธˆ ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„Œ ํŠธ๋Ÿญ์€ ๋‹ค๋ฆฌ์—์„œ ์ œ๊ฑฐํ•ด์•ผํ•œ๋‹ค.
    weight -= out    # ๋ฐฉ๊ธˆ ๋‹ค๋ฆฌ ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„Œ ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋ฅผ weight์—์„œ ๋นผ์ค˜์•ผ ๋‹ค์Œ ํŠธ๋Ÿญ์ด ๋„˜์–ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

    if trucks:    # ๋„˜์–ด ์˜ฌ ํŠธ๋Ÿญ์ด ๋‚จ์•„์žˆ์„ ๋•Œ 
        if weight + trucks[0] <= l:    # ๋‹ค๋ฆฌ ํ•˜์ค‘์„ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ์œผ๋ฉด
            bridge.append(trucks[0])    # ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋ ค๋Š” ํŠธ๋Ÿญ
            weight += trucks[0]    # weight์— ํ˜„์žฌ ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋ ค๋Š” ํŠธ๋Ÿญ ๋ฌด๊ฒŒ ์ถ”๊ฐ€
            trucks.pop(0)  
        else:    # ๋‹ค๋ฆฌ ํ•˜์ค‘์„ ๊ฒฌ๋”œ ์ˆ˜ ์—†์œผ๋ฉด
            bridge.append(0)    # 0์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋‹ค๋ฆฌ์œ„์— ์žˆ๋Š” ํŠธ๋Ÿญ์„ ๋จผ์ € ๋ณด๋‚ธ๋‹ค.
    time += 1    # ์กฐ๊ฑด๊ณผ ์ƒ๊ด€์—†์ด ์‹œ๊ฐ„์€ ํ˜๋Ÿฌ๊ฐ„๋‹ค.

    if not bridge:    # ๋‹ค๋ฆฌ์œ„์— ํŠธ๋Ÿญ์ด ๋‹ค ์ง€๋‚˜๊ฐ€๋ฉด ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ
        break    
print(time)

 

# ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ
n, w, l = map(int, input().split())
trucks = list(map(int, input().split()))

bridge = [0] * w
time = 0

while bridge:
    time += 1
    bridge.pop(0)
    if trucks:
        if sum(bridge) + trucks[0] <= l:
            bridge.append(trucks.pop(0))
        else:
            bridge.append(0)
print(time)
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€