안녕하세요. 오늘은 다리를 지나는 트럭 문제를 풀어보겠습니다.
우선 이 문제는 제약조건에 의해 문제에서 제시해준 방법대로 풀어도 시간 초과가 나지 않으므로 문제의 풀이 방법대로 구현하였습니다.
우선 구조체로 weight와 seconds를 포함한 다리 위의 truckStatus 구조체를 만들어 주었습니다.
그리고 while문에서 시간(answer)을 측정하면서 문제의 풀이처럼 구현해줍니다.
우선 while문 조건으로 "두가지 queue가 모두 비어있으면 탈출합니다"로 설정하였습니다.
그리고 다리위의 queue가 비어있지 않다면 시간을 증가시켜주고 맨앞의 트럭이 다리길이만큼 시간이 지났다면 dequeue해줍니다.
그리고나서 다리위의 트럭의 토탈 무게를 측정하고 대기트럭이 있다면 대기 트럭의 앞트럭이 올라갈수 있는지 없는지 판단 후
올라갈 수 있다면 bridgeQueue에 append해주고 waitingTruckQueue를 dequeue해주면 문제가 해결됩니다.
import Foundation
struct truckStatus {
var weight:Int
var seconds:Int
}
func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
var waitingTruckQueue = truck_weights
var bridgeQueue = [truckStatus]()
var answer = 0
while !(waitingTruckQueue.isEmpty && bridgeQueue.isEmpty) {
answer += 1
if !bridgeQueue.isEmpty {
for i in 0..<bridgeQueue.count {
bridgeQueue[i].seconds += 1
}
if bridgeQueue[0].seconds == bridge_length {
bridgeQueue.removeFirst()
}
}
var totalWeight = 0
for i in bridgeQueue {
totalWeight += i.weight
}
if !waitingTruckQueue.isEmpty {
if totalWeight + waitingTruckQueue[0] <= weight {
bridgeQueue.append(truckStatus(weight: waitingTruckQueue[0], seconds: 0))
waitingTruckQueue.removeFirst()
}
}
}
return answer
}
오늘은 여기까지이며, 질문이 있으시면 댓글로 남겨주세요.
즐거운 하루 되세요!😀
'Algorithm Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 탐욕법(Greedy) 큰 수 만들기 with Swift (0) | 2022.01.25 |
---|---|
[프로그래머스] 정렬 H-Index with Swift (0) | 2022.01.24 |
[프로그래머스] Summer/Winter Coding(~2018) 배달 with Swift (0) | 2022.01.21 |
[프로그래머스] 월간 코드 챌린지 시즌2 괄호 회전하기 with Swift (0) | 2022.01.20 |
[프로그래머스] 2019 KAKAO BLIND RECRUITMENT 후보키 with Swift (0) | 2022.01.15 |