알고리즘 문제 풀이

[프로그래머스] 다리를 지나는 트럭 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]))