문제 : https://programmers.co.kr/learn/courses/30/lessons/42583
코딩테스트 연습 - 다리를 지나는 트럭
트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈
programmers.co.kr
풀이방법 : 주석참고
func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
var myTruckWeights = truck_weights
var time = 1
var terminal = [(Int, Int)]() // (트럭무게, 터널안에 있는 시간)
terminal.append((myTruckWeights.removeFirst(),1))
while true {
if let truck = myTruckWeights.first {
var test = terminal.reduce((0,0)) {($0.0 + $1.0, 0)}
//터미널 안에있는 트럭들과 다음차의 무게를 더한다음 weight보다 높으면 아무것도 안함
if truck + test.0 > weight {
} else {
//낮으면 터미널에 차를 추가시켜줌
terminal.append((myTruckWeights.removeFirst(),0))
}
}
time += 1
//터미널 안에있는 차들이 터널 안에 있었던 시간을 1씩 더해줌
terminal = terminal.map{($0.0, $0.1 + 1)}
//터미널 안에 있는 시간이 bridge_length와 같아지면 터미널에서 빼줌
terminal = terminal.filter{$0.1 < bridge_length}
if terminal.isEmpty && myTruckWeights.isEmpty {
time += 1
break
}
}
return time
}
반응형
'알고리즘' 카테고리의 다른 글
[정렬] 병합정렬 Swift (0) | 2021.07.20 |
---|---|
[정렬] H-Index 프로그래머스 Swift (0) | 2021.07.19 |
[해쉬] 위장 - 프로그래머스 Swift (2) | 2021.07.14 |
[해쉬] N-Repeated Element in Size 2N Array - LeetCode Swift (0) | 2021.07.14 |
[완전탐색] LeetCode contains-duplicate : 중복찾기 - 스위프트 (0) | 2021.07.09 |