문제
프로그래머스 다리를 지나는 트럭
programmers.co.kr/learn/courses/30/lessons/42583
언어
자바스크립트(JavaScript)
접근 방법
- 다리위 트럭을 이동시킨다.
- 다리를 건넌 트럭이 있으면 다리 위에서 제거한다.
- 다음 트럭이 다리 위에 올라갈 수 있다면 다리 위에 올린다.
- 모든 트럭이 다리를 건넜는지 확인하고, 아니라면 반복한다.
코드
function solution(bridge_length, weight, truck_weights) {
let cnt = 0;
let bridgeStateList = [];
while(true){
cnt ++;
// 모든 트럭 이동
bridgeStateList.forEach((bridgeState=>{
bridgeState.pos += 1;
}))
// 다리 건넌 트럭있으면 다리에서 제거
bridgeStateList = bridgeStateList.filter(bridgeState=> bridgeState.pos !== (bridge_length+1));
// 다음 트럭이 다리 위에 올라 갈 수 있는지 확인하고
// 가능하다면 트럭 다리 건너기
if (getIsWeightSafe(truck_weights[0], weight, bridgeStateList)){
bridgeStateList.push({
pos: 1,
weight: truck_weights.shift()
})
}
// 모든 트럭이 다리 건넜는지 확인
if (bridgeStateList.length === 0){
break;
}
}
return cnt;
}
const getIsBridgeEntEmpty = (bridgeStateList) => {
let flag = true;
bridgeStateList.forEach(bridgeState=>{
if(bridgeState.pos === 1){
flag = false;
}
})
return flag;
}
const getIsWeightSafe = (truckWeight, safeWeight, bridgeStateList) => {
let totalWeight = 0
totalWeight += truckWeight;
bridgeStateList.forEach(bridgeState=>{
totalWeight += bridgeState.weight;
})
return safeWeight >= totalWeight;
}
복기
- 문제가 어렵지 않은데 오래 걸렸다.
- 어떻게 풀지 미리 적어놓고 풀었는데, 이 때 잘못 생각했다. 코드 짜기전에 더 많이 고민해봐야한다.
'개발 공부 > 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] 퀴드압축 후 개수 세기 (0) | 2021.04.12 |
---|---|
[프로그래머스] 삼각 달팽이 (0) | 2021.04.12 |
[프로그래머스] 두 개 뽑아서 더하기 (0) | 2021.04.07 |
알고리즘 복잡도와 빅 오 표기법 (0) | 2020.06.20 |
[프로그래머스] [3차] n진수 게임 (0) | 2020.06.11 |