ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 13335 트럭
    Algorithm/BOJ 2021. 6. 4. 15:29
    728x90

    출처: https://www.acmicpc.net/problem/13335

    분류: 구현, 시뮬레이션


    접근방식

    어떻게 하면 똑똑하게 풀 수 있을지 고민이 되었던 문제네요..

    결국 시간을 1초씩 늘리면서 매 시간 진입, 나갈 수 있는 트럭을 체크해주면서 해결했습니다.
    매 시간 늘리지 않고 의미있는 시간 단위로 체크하면서 처리하고 싶었는데... 잘 모르겠네요 😢

     


     

    말씀드렸다시피 매 시간 체크를 해주기 위해
    현재 시간, 다음 진입해야 할 트럭, 현재 다리 위에 달리고 있는 트럭, 다리의 무게, 각 트럭의 끝나는 시간을 기록한 배열
    등을 정의했습니다.

    풀이는 간단합니다.
    더이상 기다리고 있는 트럭이 없을 때까지 반복하는데요,

    현재 시간에 끝나는 트럭이 있는지 먼저 확인해서 빼주고
    다음 트럭이 진입할 수 있는지 체크해서 진입과 동시에 끝나는 시간을 기록해줍니다.
    그리고 시간을 늘려줍니다.

    첫 번째 트럭은 1초에 이미 진입했다고 가정하고 2초부터 시작해줬습니다 :)

     

    해결방법

    let input = readLine()!.split(separator: " ").map { Int(String($0))! }
    let (n, w, l) = (input[0], input[1], input[2])
    var trucks = readLine()!.split(separator: " ").map { Int(String($0))! }
    var endTime = [Int](repeating: 0, count: n)
    endTime[0] = w+1
    var loadWeight = trucks[0]
    var running = 0
    var waitTruck = 1
    var currentTime = 2
    
    while waitTruck < n {
        if currentTime == endTime[running] {
            loadWeight -= trucks[running]
            running += 1
        }
        
        if loadWeight + trucks[waitTruck] <= l {
            endTime[waitTruck] = currentTime + w
            loadWeight += trucks[waitTruck]
            waitTruck += 1
        }
        
        currentTime += 1
    }
    
    print(endTime.last!)

     

    배운점

    빠르고 정확하게 슈귯ㄱ

    ....

    푸는 날까지

    'Algorithm > BOJ' 카테고리의 다른 글

    백준 1941 소문난 칠공주  (0) 2021.06.06
    백준 2668 숫자고르기  (0) 2021.06.04
    백준 2250 트리의 높이와 너비  (0) 2021.06.04
    백준 1094 막대기 (비트 개수 세기)  (0) 2021.06.03
    백준 2056 작업  (0) 2021.06.03

    댓글

Designed by Tistory.