반응형
안녕하세요. 개발 중인 정주입니다.
오늘은 프로그래머스(Lv.2) - 다리를 지나는 트럭 문제를 풀었습니다.
목차
Github
문제 링크
누락된 문제 설명
- 트럭은 1초에 1 만큼 이동이 가능하다.
- 트럭의 순서는 변경 불가하다.
풀이
이번 문제는 큐를 이용한 문제인데요.
로직이 도저히 안 떠올라서 다른 분의 로직을 확인하고 코드를 짰습니다.
막상 로직을 보니 왜 떠올리지 못했지라는 생각이 들었네요.
맨 처음 다리 길이만큼 0으로 채운 weights 배열을 정의합니다.
반복은 올라간 트럭의 수가 전체 트럭의 개수와 동일해질 때까지 진행합니다.
반복 로직
1. 다리 위에 올라간 전체 무게에서 weights의 first 요소를 빼줍니다. 이를 위해 다리 길이만큼 0으로 채운 것입니다.
2. time도 1씩 증가시켜줍니다.
3-1. 다음 트럭 무게와 total 무게의 합이 버틸 수 있는 무게보다 작을 때 weights에 트럭 무게를 더해주고 truckCount를 1 증가시킵니다.
3-2. 버틸 수 있는 무게보다 클 경우 weights에 0을 append 해줍니다.
4. 반복이 끝나면 time + 다리 길이를 return 합니다.
저는 3-2를 생각하지 못해서 이런 로직을 떠올리지 못했던 것 같습니다.
기발한 생각을 잘 못하겠네요 ㅠㅠ
연습을 많이 해야겠습니다.
전체 코드
import Foundation
func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
var time = 0, totalWeight = 0, truckCount = 0
var weights: [Int] = Array(repeating: 0, count: bridge_length)
while truckCount < truck_weights.count {
totalWeight -= weights.removeFirst()
time += 1
if truck_weights[truckCount] + totalWeight <= weight {
totalWeight += truck_weights[truckCount]
weights.append(truck_weights[truckCount])
truckCount += 1
} else {
weights.append(0)
}
}
return time + bridge_length
}
let bridge_length = 2
let weight = 10
let truck_weights = [7, 4, 5, 6]
print(solution(bridge_length, weight, truck_weights))
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.
반응형