let bridge_length = 100;
let weight = 100;
let truck_weights = [10,10,10,10,10,10,10,10,10,10];
function solution(bridge_length, weight, truck_weights) {
let answer = 0; // 경과시간
const currentBridge = []; // 현재 다리 상태
let currentWeight = 0; // 현재 다리 무게
let currentTruck = 0; // 현재 다리에 있는 트럭
// 다리길이 만큼 현재 다리 상태 0으로 채워서 초기화
for (let i = 0; i < bridge_length; i++) {
currentBridge.push(0);
}
// 다리 초기화 후 첫번째 트럭을 넣어준다
currentTruck = truck_weights.shift();
currentBridge.unshift(currentTruck); // 다리 첫번째에 넣어주고 다리 길이를 맞춰주기 위해 pop
currentBridge.pop();
currentWeight += currentTruck; // 무게 증가
answer++;
// 현재 다리 무게가 0이 될때까지 트럭 넣고 빼고 반복
while (currentWeight) {
currentWeight -= currentBridge.pop(); // 맨 뒤에 있던 요소가 다리를 벗어남
// 대기중인 트럭에서 가장 앞에 있는 트럭 가져옴
currentTruck = truck_weights.shift();
// 대기중이었던 트럭이 다리에 올라 갈수 있는지 없는지 판별
// 올라갈수 있으면 추가하고, 올라갈수 없으면 다시 대기 리스트로 넣고 0으로 채움
if (currentWeight + currentTruck <= weight) {
currentBridge.unshift(currentTruck);
currentWeight += currentTruck;
} else {
currentBridge.unshift(0);
truck_weights.unshift(currentTruck);
}
answer++;
}
return answer;
}
console.log(solution(bridge_length, weight, truck_weights));
반응형
'자료구조&알고리즘 > 알고리즘-문제풀이' 카테고리의 다른 글
[프로그래머스-Level1] 완주하지 못한 선수 (0) | 2020.06.20 |
---|---|
[프로그래머스-Level1] 시저암호 (0) | 2020.06.19 |
[프로그래머스-Level2] 기능개발 (0) | 2020.06.18 |
[코드업 기초100제] 1097-[기초-2차원배열] 바둑알 십자 뒤집기 (0) | 2020.05.06 |
[코드업 기초100제] 1099-[기초-2차원배열] 성실한 개미 (0) | 2020.05.06 |