/
TruckPassingBridge.swift
58 lines (52 loc) · 1.5 KB
/
TruckPassingBridge.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// 문제: programmers.co.kr/learn/courses/30/lessons/42583
// TruckPassingBridge.swift
// Practice
//
// Created by 위대연 on 2021/04/30.
//
import Foundation
class TruckPassingBridge {
struct Truck {
let weight:Int
var position:Int = 0
}
func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
func totalTruckWeight(truckArray:[Truck]) -> Int {
var result = 0
for item in truckArray {
result += item.weight
}
return result
}
var passingArray = [Truck]()
var endArray = [Truck]()
var truckArray = [Truck]()
for item in truck_weights {
let truck = Truck(weight: item, position: 0)
truckArray.append(truck)
}
var waitArray:[Truck] = truckArray
var time = 0
while endArray.count < truckArray.count {
if passingArray.count > 0 {
for index in 0 ..< passingArray.count {
passingArray[index].position += 1
}
if passingArray[0].position >= bridge_length {
//print("end \(passingArray[0].weight) time:\(time)")
endArray.append(passingArray[0])
passingArray.remove(at: 0)
}
}
if waitArray.count > 0 {
if (totalTruckWeight(truckArray: passingArray) + waitArray[0].weight) <= weight {
//print("passing - \(waitArray.first!) time - \(time)")
passingArray.append(waitArray.first!)
waitArray.removeFirst()
}
}
time += 1
}
return time
}
}