https://school.programmers.co.kr/learn/courses/30/lessons/42583
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 풀이)
1. 모든 트럭은 순차적으로 지나간다.
2. 모든 트럭은 1초에 1씩 갈수 있음 -> 이것 때문에 글을 여러번 읽음... ;;
- 다리의 길이(bridge_length)가 20m, A트럭의 길이가 1m라고 가정하면 A트럭은 1초에 선미가 1m, 후미가 0m에 위치해 있다. 2초에는 선미가 2m, 후미가 1m에 있다. 20초면 선미가 20m, 후미가 19m쯤에 있어 완전히 통과하는 것은 21초이다.
3. 먼저 다리를 지나가고 있는 트럭을 표현하기 위해 다리의 길이만큼 0의 개수를 채운 큐를 만들었다.
4. 큐가 완전히 빌동안 (모든 트럭이 지나갈 동안)
매번 1초씩 증가시켰고,
1초가 지나면 트럭이 움직이기 때문에, 다리에 올라간 트럭의 무게 합애서 큐의 첫인자를 삭제 시켰다.
(트럭이 지나갈수도 있고, 0이 지나갈 수도 있기 때문)
5. 기다리고 있는 첫번째 트럭이 존재하고,
이 트럭의 무게와 다리에 올라간 트럭들의 무게 합이 다리가 견딜수 있는 무게이면
무게의 합에 첫번째 트럭의 무게를 추가하고,
기다리는 트럭의 첫번쨰요소를 제거하고,
다리에 올라갔으니 큐에 추가했다.
6. 기다리고 있는 첫번째 트럭이 존재하고,
이 트럭의 무게와 다리에 올라간 트럭들의 무게 합이 다리가 견딜수 있는 무게이면
올라갈 트럭이 없지만 자리를 채워야 트럭의 위치를 나타낼수 있어 큐에 0을 추가했다.
import Foundation
func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
var queue = Array(repeating: 0, count: bridge_length) //큐
var sum = 0 //다리에 올라간 트럭의 무게 합
var waitTruck = truck_weights //기다리는 트럭들
var result = 0 //총 시간
while !queue.isEmpty{
result += 1
sum -= queue.removeFirst()
if let t = waitTruck.first{
if t + sum <= weight{
sum += waitTruck.removeFirst()
queue.append(t)
}
else{
queue.append(0)
}
}
}
return result
}
'Swift랑 친해지기 > programmers 풀기' 카테고리의 다른 글
[프로그래머스] 모음사전 (Swift) (0) | 2023.12.13 |
---|---|
[프로그래머스] 숫자 변환하기 (Swift) (0) | 2023.12.12 |
[프로그래머스] 베스트앨범 (Swift) (1) | 2023.11.14 |
[프로그래머스] 소수 만들기 (Swift) (0) | 2023.11.02 |
[프로그래머스] 기사단원의 무기 (Swift) (1) | 2023.10.31 |