[백준-13335] 트럭

이말감·2022년 4월 16일
0

백준

목록 보기
32/49

문제

링크

코드

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를 더해주면 된다.

근데 코드 길이만 줄고 메모리랑 시간은 비슷하다.ㅎㅎ
문제를 다 풀고 다른 분들 코드를 참고하다 발견할 수 있었다.

profile
전 척척학사지만 말하는 감자에요

0개의 댓글