티스토리 뷰

PS

[Swift] 백준_트럭(13335)

희철 2023. 1. 6. 19:52

문제

 

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

 

 

풀이

 

다리를 queue라고 생각하고, 다리에 무게를 초과하지 않을때까지 트럭을 1초마다 추가하였다. 이때, end라는 배열에 트럭이 지나가는 시간을 같이 추가해주었다.

 

시간을 1초씩 증가시키며 end[0]와 time이 같은 경우엔 트럭이 지나간 것이므로 큐에서 맨 앞 트럭을 제거해주었다.

 

이렇게 구현한 경우엔 마지막 트럭이 trucks배열에서 빠져나가면 trucks배열이 비게 되어 while문이 종료된다. 이때의 time은 트럭이 들어온 시간일 것이므로 마지막 트럭이 지나가는데 소요되는 시간인 다리의 길이를 더해주어 출력해주었다.

import Foundation

let input = readLine()!.split(separator: " ").map { Int(String($0))! }
var trucks = readLine()!.split(separator: " ").map { Int(String($0))! }
var queue: [Int] = []
var end: [Int] = []
var time = 0
while !trucks.isEmpty {
    if queue.reduce(0) { $0 + $1 } + trucks[0] <= input[2] && queue.count < input[1] {
        queue.append(trucks.removeFirst())
        end.append(time + input[1])
    }
    time += 1
    if end[0] == time {
        queue.removeFirst()
        end.removeFirst()
    }
}
print(time + input[1])

 

_____________________________________________________________________________________________________

 

생각난 방법이 있다면 일단 구현해보자.

'PS' 카테고리의 다른 글

[Swift] 백준_Router(15828)  (0) 2023.01.08
[Swift] 백준_오아시스 재결합  (0) 2023.01.07
[Swift] 백준_앵무새  (0) 2023.01.06
[Swift] 백준_프린터 큐(1966)  (0) 2023.01.06
[Swift] 백준_문자열 폭발(9935)  (0) 2023.01.05
댓글
최근에 올라온 글
Total
Today
Yesterday