문제
풀이
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(int bridge_length, int weight, vector<int> truck_weights) {
int count = 0; // 시간
int noww = 0; // 현재 다리 위에있는 트럭들의 무게
queue<pair<int,int>> q;
for(int i=0 ;i<truck_weights.size(); i++){
count++;
if(q.front().second + bridge_length == count){
noww-=q.front().first;
q.pop();
}
while (noww + truck_weights[i] > weight){
count = q.front().second + bridge_length;
noww -= q.front().first;
q.pop();
}
q.push(pair(truck_weights[i], count));
noww += truck_weights[i];
}
count += bridge_length;
return count;
}
pair 자료구조를 활용해 first엔 트럭의 무게 값을 , second엔 다를 건너기 시작한 시간 값을 주었다.
bridge_length는 트럭이 다리를 건너는데 걸리는 시간이다.
- 현재 시간(count)이 다리를 건너기 시작한 시간(second) + 트럭이 다리를 건너는 데 걸리는 시간(bridge_length) 일 경우 pop 한다.
- 다리에 있는 트럭의 무게(noww)가 다음 순서 트럭의 무게(truck_weights)를 견딜 수 없다면 pop 한다.
다른 사람 풀이
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(int bridge_length, int weight, vector<int> truck_weights) {
int answer = 0;
int tot_w = 0;
int t_front = 0;
int t_cur = 0;
int sec = 0;
queue <int> q;
while (t_front != truck_weights.size()) {
if (!q.empty() && (sec - q.front() == bridge_length)) {
tot_w -= truck_weights[t_front];
++t_front;
q.pop();
}
if (t_cur != truck_weights.size() && tot_w + truck_weights[t_cur] <= weight) {
tot_w += truck_weights[t_cur];
++t_cur;
q.push(sec);
}
++sec;
}
answer = sec;
return answer;
}
'Algorithm > Programers - C++' 카테고리의 다른 글
[프로그래머스] 완전탐색 - 카펫 (0) | 2022.10.30 |
---|---|
[프로그래머스] 정렬 - H-Index / greater<>() (0) | 2022.10.22 |
[프로그래머스] n^2 배열 자르기 (0) | 2022.10.09 |
[프로그래머스] 완전탐색 - 피로도 (0) | 2022.10.09 |
[프로그래머스] 위장 (0) | 2022.09.09 |