알고리즘 문제 풀이
[프로그래머스] 다리를 지나는 트럭 42583 swift
lgvv
2021. 11. 16. 18:10
✅ 이번 시간에는 이 문제를 알아보자..!
난이도는 개인적으로 쉬움!
이번시간에 확실하게 느낀건데, 어떤 문제를 읽고 파악하기까지가 늦는다...
그래서 문제와 다르게 다른 알고리즘을 짜다가 아..! 이렇게 문제가 이게 아니구나!
를 매번 늦게 파악해 ㅠㅠ
//
// main.swift
// algorithm
//
// Created by Hamlit Jason on 2021/11/16.
// https://programmers.co.kr/learn/courses/30/lessons/42583
import Foundation
func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
var time = 1
var middle = [Int]()
var middle_time = [Int]()
var i = 0
while true {
// 1. 다리에 트럭 넣기
if middle.reduce(0, +) <= weight {
//print("\(middle) 들어간 트럭 무게 \(truck_weights[i]) 및 시간 \(time)")
middle.append(truck_weights[i])
middle_time.append(bridge_length)
if middle.reduce(0, +) > weight {
i = i - 1
middle.removeLast()
middle_time.removeLast()
}
} else {
i = i - 1
}
// 2. 다리에 올라간 트럭 빠져나가기 로직
time = time + 1
middle_time = middle_time.map{ $0 - 1 }
//print("미들 타임 : \(middle_time), \(middle_time.first!)")
if middle_time.first == 0 {
//print("지웁니다.")
middle.removeFirst()
middle_time.removeFirst()
} else {
//print("else")
}
i = i + 1
if i >= truck_weights.count {
break
}
}
//print(middle_time)
time = time + middle_time.last!
return time
}
print(solution(2, 10, [7,4,5,6]))
print(solution(100, 100, [10]))