문제
https://school.programmers.co.kr/learn/courses/30/lessons/42583
`프로그래머스 :: 다리를 지나는 트럭 :: Lv. 2`
문제 리뷰
지문을 읽으면서 트럭이 다리를 지나는 모습을 상상하게 되는 문제였습니다.
그래서 이 상상대로 구현이 될 것 같은 느낌이 왔는데요..
문제를 풀면서 이런 그림을 그린 것은 아니고요
지금 게시글로 쓰면서 그려보았습니다. 재밌네요 (ㅋ)
코드를 보시면
와 진짜 그림대로 구현했네..
라고 생각하시게 될 것 같습니다.
첫 번째 시도 (정답)
code
function solution(bridge_length, weight, truck_weights) {
let bridge = new Array(bridge_length).fill(null);
let bridgeWeightSum = 0;
let time = 0;
while (bridge.length > 0 || truck_weights.length > 0) {
const bridgeHead = bridge.shift();
if (bridgeHead) {
// 트럭 빠져나갔어요 무게 뺄게요
bridgeWeightSum -= bridgeHead;
}
if (truck_weights.length > 0) {
// 남은 트럭이 있어요
const target = truck_weights[0];
bridge.push(target);
bridgeWeightSum += target;
if (bridgeWeightSum > weight) {
// 무게 초과했어요 빠꾸할게요
bridge.pop();
bridgeWeightSum -= target;
bridge.push(null); // 빈 공간
}
else {
// 무사히 다리에 진입했어요
truck_weights.shift();
}
}
time++; // 시간은 계속 흐른다..
}
return time;
}
review
다리를 지나가고 싶은 트럭이 있으면
그 트럭(target)을 다리에 넣어보려고 견적을 짰다가
견적이 영 안나오면(weight 초과) 다리 진입을 통제하게 되는 건데요.
진입이 통제된 사이에도 시간을 계속 흐르게 되는 것이죠..
거스를 수 없는 시간의 흐름이란 정말 무서운 것입니다..
다른 분들의 풀이를 보면, 저처럼 이렇게 시간을 1씩 흘려보내는 방법 대신
현재 트럭 ~ 다음 트럭 사이의 시간을 점프하도록 설계하신 분도 계셨습니다.
이런 방법이라면 다리 길이가 아주아주아주 길게 주어지더라도
어떤 문제나 성능 저하 없이 더 아름답게 결과를 낼 수 있을 것 같습니다.
저도 다시 도전을 해봐야겠습니다. 아자 ㅋ
'공부 > 코딩테스트' 카테고리의 다른 글
[BOJ/js] 31924번: 현대모비스 특별상의 주인공은? 2 (1) | 2025.05.13 |
---|---|
[프로그래머스/js] 네트워크 (Lv. 3) (0) | 2025.04.22 |
[프로그래머스/js] 게임 맵 최단거리 (Lv. 2) (4) | 2025.04.21 |
[프로그래머스/js] 캐시 (Lv. 2) (1) | 2025.04.18 |
[프로그래머스/js] 소수 찾기 (Lv. 2) (2) | 2025.04.16 |