[白俊-1335]トラック


質問する


リンク

コード#コード#

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

n, w, l = map(int, input().split())

truck = list(map(int, input().split()))

# 다리 길이만큼 0으로 초기화
queue = [0] * w
queue = deque(queue)

answer = 0
for t in truck :
    while True :
        # 맨 앞에 있는 수를 하나씩 pop
        queue.popleft()
        # 곧 들어갈 숫자 t와 큐에 있는 숫자의 합이 l보다 크면 0을 넣어줘서 
        # 다리 위의 트럭이 건너가도록
        if sum(queue) + t > l :
            queue.append(0)
            answer += 1
            continue
        # 합이 l보다 작거나 같으면 트럭을 다리에 올린다.
        else :
            queue.append(t)
            answer += 1
            break

# 모든 트럭이 다리 위에 올라가고
# 마지막 트럭이 다리를 건널 때까지
while sum(queue) > 0 :
    queue.popleft()
    queue.append(0)
    answer += 1
print(answer)
  • 改良コード
  • import sys
    from collections import deque
    input = sys.stdin.readline
    
    n, w, l = map(int, input().split())
    
    truck = list(map(int, input().split()))
    
    queue = [0] * w
    queue = deque(queue)
    
    answer = 0
    for t in truck :
        while True :
            queue.popleft()
            answer += 1
            if sum(queue) + t > l :
                queue.append(0)
                continue
            else :
                queue.append(t)
                break
    answer += w
    print(answer)
    # 모든 트럭이 다리 위에 올라가고
    # 마지막 트럭이 다리를 건널 때까지
    while sum(queue) > 0 :
        queue.popleft()
        queue.append(0)
        answer += 1
    最初のコードでは、
    answer += w
    このように変えることができます.
    最後のトラックは橋の上まで登るので、すべての道を渡るために橋の長さに従って移動しなければなりません.
    wを加えればいいです.

    しかし、コードの長さを短くするだけで、メモリと時間の差は多くありません.ほほほ
    問題が終わったら他者のコードを参考にしてください.