문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42583
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
1. 생각
제일 헷갈렸던 부분은, 트럭 한대가 다리를 건너는 데 bridge_length초 걸린다는 사실이다. 문제에서 이 부분에 대한 설명 미흡해서 이해가 어려웠다.
맨 처음, truck_weights에 다리를 지난 시간을 나타내는 time 속성을 각 객체에 map을 통하여 추가해주었다.
그리고 truck_weights의 첫 번째 트럭을 새로 생성한 bridge 배열에 넣어주고 time 속성을 +1 해준다음, 우리가 구해줘야 하는 총 시간인 usedTime도 +1 해주었다.
이제 truck_weights의 트럭들을 bridge에 옮길 차례이다.
- bridge 제일 앞에 있는 트럭의 time이 bridge_length초 이상이면 bridge 배열에서 제거한다.
- 다리를 건너는 트럭들의 무게의 합 + truck_weights의 제일 앞에서 기다리고 있는 트럭 무게 ≤ weight 이며 다리에 트럭이 최대 bridge_length대 올라갈 수 있는 조건을 만족할 때 bridge 배열에 트럭을 추가시킨다.
위 작업들을 bridge 배열과 truck_weights 배열이 빌 때까지 반복한다.
2. 코드
function solution(bridge_length, weight, truck_weights) {
// 다리에는 트럭이 최대 bridge_length대 올라갈 수 있음
// bridge_length: 다리의 길이, 최대 몇대 올라갈 수 있는지
// 다리는 weight 이하까지의 무게를 견딜 수 있음
// 예시에는 bridge_length : 2, weight: 10, truck_weights: [7,4,5,6]
// 소요된 시간(초)
let usedTime = 0;
// 다리 배열
let bridge = [];
truck_weights = truck_weights.map((element) => {
return {
weight: element,
time: 0,
}
})
let firstTruck = truck_weights.shift();
bridge.push(firstTruck);
firstTruck.time++;
usedTime++;
while(bridge.length > 0 || truck_weights.length > 0) {
if (bridge.length > 0 && bridge[0].time >= bridge_length) {
bridge.shift();
}
if(truck_weights.length > 0) {
// 가장 앞에서 기다리는 트럭
let waitingTruck = truck_weights[0];
// 트럭 무게의 총합
let truckWeightSum = 0;
// 다리를 건너는 트럭들의 무게의 합 구하기
if(bridge.length !== 0) {
bridge.forEach((element) => {
truckWeightSum += element.weight;
})
}
// 다리를 건너는 트럭들의 무게의 합 + waitingTruck.weight <= weight일 때
// 그리고 다리에는 트럭이 최대 bridge_length대 올라갈 수 있는 조건에 부합하는지 체크
if(truckWeightSum + waitingTruck.weight <= weight && bridge.length < bridge_length) {
bridge.push(truck_weights.shift());
}
}
bridge.forEach((element) => {
element.time++;
})
usedTime++;
}
return usedTime;
}
고려해야 될 조건이 많아서 풀기 어려웠던 문제였던 것 같다.
'Programmers(JavaScript)' 카테고리의 다른 글
[프로그래머스 자바스크립트] ‘디스크 컨트롤러’ 풀기 (0) | 2025.03.09 |
---|---|
[프로그래머스 자바스크립트] ‘베스트앨범’ 풀어보기 (1) | 2025.02.02 |
[프로그래머스 자바스크립트] ‘네트워크’ 풀어보기 (0) | 2025.01.27 |
[프로그래머스 자바스크립트] ‘정수 삼각형’ 풀어보기 (0) | 2025.01.24 |
[프로그래머스 자바스크립트] ‘가장 큰 수’ 풀어보기 (0) | 2025.01.20 |