코드는 Swift로 작성하였습니다.
제가 직접 작성한 코드라 최적의 코드가 아닐 수 있음을 알려드립니다. 🐹
문제는 저작권 관련 문제가 있을 수 있어서 적어두지 않았습니다.
어떤 트럭이 다리 위에 있는지 체크 해야하고,
그 트럭들이 얼마나 그 다리 위에 있었는지 체크 해야한다.
removeFirst() 는 시간복잡도가 높기 때문에 사용하지 않는 것도 괜찮겠다!
index처럼 표시를 통해서 다리 위에 있는 트럭들을 구분해보자 !
import Foundation
func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
var timeCheck = [Int](repeating: 0, count: truck_weights.count)
var result = 1
var nowFirst = 0
var nowLast = 0
var nowInBridge = truck_weights[0]
while true {
if (nowLast == truck_weights.count-1) { // 마지막 트럭이 올라가면 while 문 탈출
break
}
result += 1 // 시간의 흐름
for i in nowFirst...nowLast { // 올라가 있는 트럭들 시간 올려주기
timeCheck[i] += 1
}
if timeCheck[nowFirst] >= bridge_length { // 일정 시간이 지나면 통과처리
nowInBridge -= truck_weights[nowFirst]
nowFirst += 1
}
if nowInBridge + truck_weights[nowLast+1] <= weight { // 그 다음 트럭이 들어올 상황이면 넣어준다
nowLast += 1
nowInBridge += truck_weights[nowLast]
}
}
result += bridge_length // 마지막 트럭에 대한 시간 경과 처리
return result
}