문제
https://school.programmers.co.kr/learn/courses/30/lessons/42583
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
1. while문으로 bridge가 빌 때까지 실행
2. bridge를 지나는 트럭의 위치 업데이트 해주고,
3. 다리에 올라올 트럭을 포함한 무게가 다리 무게 범위 만족하면 트럭 추가
4. 시간 += 1
worst case로 bridge_length * truck_weights인 경우가 시간 초과가 될까봐, while문 내부의 연산을 최대한 가볍게 하려고 했다.
while문에서 매번 합을 구하지 않고, 애초에 sum 변수를 통해 다리 위에서 나가는 트럭 무게, 들어오는 트럭의 무게만 더하고 빼줬다.
다리를 지나는 트럭 위치를 업데이트해줘야 했는데, 새로운 변수를 만들어 나가지 않는 트럭들의 정보를 담았고 앞에 빈 자리를 하나 붙이는 방식으로 진행했다.
다행히 시간 초과가 나지 않았다.
코드
func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
var trucks = Array(truck_weights.reversed())
var bridge = [trucks.removeLast()] + Array(repeating: 0, count: bridge_length-1)
var sum = bridge.first!
var time = 1
while sum != 0 {
sum -= bridge.last!
let arr = bridge[0..<bridge_length-1]
bridge = [0] + arr
if let truck = trucks.last, truck + sum <= weight {
bridge[0] = truck
sum += truck
trucks.removeLast()
}
time += 1
}
return time
}
'PS' 카테고리의 다른 글
[백준 - Swift] 10799 쇠막대기 (0) | 2023.01.19 |
---|---|
[백준 - Swift] 1874 스택 수열 (0) | 2023.01.19 |
[ 백준 2579 - 계단 오르기 ] (0) | 2021.08.11 |
[ 백준 1003 - 피보나치 함수 ] (0) | 2021.08.10 |
[백준 11726 - 2 x n 타일링] DP (0) | 2021.08.09 |