ABOUT ME

woongS, iOS, succesS 삼쓰의 개발 블로그

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' 카테고리의 다른 글

    댓글

Designed by Tistory.