https://school.programmers.co.kr/learn/courses/30/lessons/42583
풀이과정
다리를 건너는 트럭을 queue를 사용해 푸는 문제이다.
먼저 현재 무게에 대기 트럭 첫번째 값을 넣어준다.
다리를 건너는 트럭의 총 무게 + 현재 무게 <= 다리가 버틸 수 있는 무게이므로 현재 무게를 queue에 넣는다.
반대로, 더한 값 > 다리가 버틸 수 있는 무게면 무게가 0인 트럭으로 대체하여 넣어준다.
시간은 answer++로 while문이 돌아갈 때동안 1씩 증가시켜준다.
#include <string>
#include <vector>
#include <queue>
using namespace std;
/*
bridge_length 다리에 올라갈 수 있는 최대 트럭수
weight 다리가 버틸 수 있는 무게
truck_weights 대기 트럭
*/
int solution(int bridge_length, int weight, vector<int> truck_weights) {
int answer = 0;
queue <int> on_bridge; // 다리에 올라간 트럭
int sum = 0; // 다리에 올라간 트럭 총 무게
int i = 0;
while(1){
int now_weight = truck_weights[i];
// 대기 트럭이 없을 경우에 다리의 길이만큼 시간 필요
if (i == truck_weights.size()) {
answer += bridge_length;
break;
}
// 다리에 올라간 트럭이 다리에 올라갈 수 있는 트럭수와 같을 때
if (on_bridge.size() == bridge_length) {
sum -= on_bridge.front();
on_bridge.pop();
}
// 다리에 올라간 트럭 총 무게 + 현재 무게 <= 다리가 버틸 수 있는 무게
if (sum + now_weight <= weight) {
sum += now_weight;
on_bridge.push(now_weight);
i++;
} else { // 못 올라가면 무게 0 트럭으로 대체
on_bridge.push(0);
}
answer++;
}
return answer;
}
'🍞 Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스][Level3] 베스트앨범 c++ (0) | 2024.02.22 |
---|---|
[프로그래머스][Level3] 네트워크 c++ (0) | 2022.10.21 |
[프로그래머스][Level3] 가장 먼 노드 c++ (0) | 2022.10.21 |
[프로그래머스][Level2] 행렬의 곱셈 c++ (0) | 2022.10.21 |
[프로그래머스][Level2] 피로도 c++ (0) | 2022.10.21 |