https://programmers.co.kr/learn/courses/30/lessons/42583
스택/큐, LV2
해당 문제는 queue를 통해 트럭을 하나씩 순서대로 가져와서 푸는 문제였다.
다리 자체도 queue를 통해 구성할 수는 있으나 vector를 통해 푸는 것이 보다 쉬울 것 같아서 vector로 접근하여 풀었다. 다리의 무게를 주의하면서 다리를 건너게 하면 된다. 문제가 주어진 상황을 그대로 시뮬레이션하면 쉽게 해결 가능한 문제였다.
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(int bl, int weight, vector<int> truck_weights) {
int answer = 0, bw = 0;
queue<int> tw;
for(int i =0 ; i <truck_weights.size(); i++)
tw.push(truck_weights[i]);
vector<pair<int,int>> bv;
// 반복
while(true){
// 트럭을 다리에 다 올리고 다리에 남은 것 이 없을 때
if(bv.size() == 0 && tw.size() == 0){
break;
}
// 트럭들 다리에서 한칸 이동
for(int i=0;i<bv.size();i++)
bv[i].second++;
// 다 건넌 것 제외
if(bv.size() >=1 && bv[0].second == bl){
bw -= bv[0].first;
bv.erase(bv.begin());
}
// 올릴 수 있음 올리기
if(tw.size()>=1 && bw + tw.front() <= weight) {
bv.push_back(pair<int,int>(tw.front(), 0)); // 올리기
bw += tw.front(); // 다리 무게 증가
tw.pop(); // 하나 빼기
}
// 시간 초 증가
answer++;
}
return answer;
}
'Archived(CSE Programming) > 알고리즘(C++)' 카테고리의 다른 글
프로그래머스 더 맵게 (0) | 2019.11.29 |
---|---|
프로그래머스_기능개발 (0) | 2019.11.23 |
프로그래머스_탑 (0) | 2019.11.20 |
프로그래머스_라면 공장 (0) | 2019.11.20 |
프로그래머스_H-Index (0) | 2019.11.19 |