졍
지영이 블로그
졍
전체 방문자
오늘
어제
  • 분류 전체보기 (95)
    • 네트워크 (12)
    • 시스템설계 (6)
    • AWS (7)
    • Elasticsearch (3)
    • Python (5)
    • 자료구조, 알고리즘 (9)
    • 코딩테스트 (29)
    • NCP (8)
    • 운영체제 (7)
    • 개인 프로젝트 (8)
    • Github (1)
    • 여행 (0)
      • 2024동유럽 (0)
    • 대학원 (0)
      • 논문정리 (0)

최근 글

최근 댓글

hELLO · Designed By 정상우.
졍

지영이 블로그

[Python] 백준 13335번 - 트럭
코딩테스트

[Python] 백준 13335번 - 트럭

2023. 5. 4. 20:58

문제: https://www.acmicpc.net/problem/13335

 

13335번: 트럭

입력 데이터는 표준입력을 사용한다. 입력은 두 줄로 이루어진다. 입력의 첫 번째 줄에는 세 개의 정수 n (1 ≤ n ≤ 1,000) , w (1 ≤ w ≤ 100) and L (10 ≤ L ≤ 1,000)이 주어지는데, n은 다리를 건너는 트

www.acmicpc.net

 

구현문제라 문제에서 요구하는 사항들만 제대로 넣어주면 제대로 동작한다.

나는 다리에 올라가기 전의 트럭(truck), 다리 위의 트럭(bridge), 다 건넌 트럭(done)을 각각 만들어 풀었다. (사실 done은 없어도 된다.

그리고 트럭은 앞 차부터 빠져나가기 때문에 리스트에서 빼기 쉽게 queue를 활용해 풀이했다.

 

from collections import deque
# n: 트럭 수, w: 다리 길이, l: 다리 최대 하중
n, w, l = map(int, input().split())
truck = deque(list(map(int, input().split())))
bridge = deque()
done = []
time = 0
weight = 0

while truck or bridge:
    time += 1
    
    # 다리위의 트럭 한칸씩 옮기기
    for i in range(len(bridge)):
        bridge[i][1] += 1
        
    # 다 건넌 트럭 done으로 옮기기
    if bridge and bridge[0][1] > w:
        weight -= bridge[0][0]
        done.append(bridge.popleft())

    # 트럭 다리위에 올리기
    if truck and weight + truck[0] <= l:
        weight += truck[0]
        bridge.append([truck.popleft(), 1])
    
print(time)

처음에는 다 건넌 트럭을 done으로 옮기는 코드를 다리위의 트럭 한칸씩 옮기는 for 문 내에 넣어 돌렸는데, 이렇게 풀면 index error가 발생한다.

왜냐하면 다 건넌 트럭을 bridge에서 빼고 나면 마지막 i 변수에 해당하는 index가 사라지기 때문이다.

 

조금만 더 생각해보면 트럭이 1초마다 1만큼씩만 움직이기 때문에 한번에 트럭 1대만 done으로 옮겨갈 수 있다는걸 알 수 있다.

따라서 for문에서 따로 빼서 첫 트럭만 매번 검사해주도록 수정하였다.

 

'코딩테스트' 카테고리의 다른 글

[Python] 백준 1700번 - 멀티탭 스케줄링  (0) 2023.06.01
[Python] 백준 1012번 - 유기농 배추  (0) 2023.05.31
[Python] 백준 1987번 - 알파벳  (0) 2023.05.04
[Python] 백준 9205번 - 맥주 마시면서 걸어가기  (0) 2023.05.01
[Python] 백준 10610번 - 30  (0) 2022.07.29
    졍
    졍

    티스토리툴바