티스토리 뷰
https://school.programmers.co.kr/learn/courses/30/lessons/42583
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🤔 해결방법
1. 길이가 bridge_length이고 0으로 채워진 다리 bridge 생성 후 shift
2. 현재 bridge에 있는 모든 숫자와 truck_weights의 첫번째 숫자의 합이 weight보다 작거나 같으면 트럭 추가와 time++, 아니면 0 추가와 time++
3. 대기 트럭이 없을 때까지 2번의 과정을 반복
🔑 풀이
대기 트럭을 앞에서부터 순서대로 꺼내야하므로 큐를 사용해 풀어야 했다.
먼저 길이가 bridge_length이고 0으로 채워진 다리 bridge (queue)를 생성한다.
이 다리에 트럭이 하나씩 들어가게 해줘야 한다.
이를 위해 현재 bridge에 있는 모든 숫자와 truck_weights의 첫번째 숫자의 합을 weight와 비교한다.
weight보다 작거나 같으면 트럭을 하나 꺼내 다리에 넣어주고 경과 시간 +1 도 해준다.
그렇지 않으면 0을 넣어주고 경과 시간 +1 을 해주면 된다.
이 과정까지 반복하면 문제에서 주어진 예시에서는 time이 6이 나오는데 답은 8이다.
모든 트럭이 다리를 다 지나갈 때까지의 시간을 계산해야 하는데 마지막 트럭이 다리에 진입하는 시점에서 반복문이 종료되어 버리기 때문이었다..!😮
따라서 다리 길이 만큼의 시간을 추가로 더해주어야 한다.
function solution(bridge_length, weight, truck_weights) {
let bridge = Array(bridge_length).fill(0); // 다리
let time = 0; // 경과 시간
// 대기 트럭이 없을 때까지
while (truck_weights.length) {
bridge.shift();
// 현재 bridge 위의 트럭 무게와 다음 트럭의 무게 합이 weight보다 작거나 같으면
if (bridge.reduce((a, b) => a + b) + truck_weights[0] <= weight) {
bridge.push(truck_weights.shift());
time++;
} else {
bridge.push(0);
time++;
}
}
return time + bridge_length;
}
마지막에 다리 길이를 더해주는 걸 생각치 못해 시간을 꽤 허비했다.😅
중학생 과외할 때 풀던 비슷한 개념의 문제가 생각났다.
기차가 터널을 완전히 통과하기까지 걸리는 시간을 구하는 문제였는데 이 문제에서도 기차가 움직인 총 길이는 기차 길이 + 터널 길이이다. 기억하자!
'JS-algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 전력망을 둘로 나누기 (javascript) (0) | 2023.10.06 |
---|---|
[프로그래머스] 주식가격 (javascript) (0) | 2023.09.15 |
[프로그래머스] 의상 (javascript) (0) | 2023.09.04 |