Problem Solving/Baekjoon Online Judge
BOJ/백준 13335 트럭
khj1999
2024. 9. 10. 20:02
https://www.acmicpc.net/problem/13335
해결 아이디어
일단 트럭시 순차적으로 진행 한다는 것을 확인 했으니 큐를 사용해서 문제를 해결하면 될것으로 판단 했고
다리 상태를 체크할 수 있는 Vector를 만들어서 검사 하는 식으로 문제를 해결 했다.
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n, w, l;
queue<int> q;
// pair의 first는 트럭의 무게 second는 현재 남은 거리
vector<pair<int, int>> bridge;
cin >> n >> w >> l;
for (int i = 0; i < n; i++) {
int tmp;
cin >> tmp;
q.push(tmp);
}
int ans = 0;
// 무게 체크
auto check = [](const vector<pair<int, int>> v) {
int sum = 0;
for (const auto element : v) {
sum += element.first;
}
return sum;
};
// 반복마다 시간 감소
auto calc = [](vector<pair<int, int>>& v) {
for (auto& element : v) {
element.second--;
}
};
while (!q.empty() || !bridge.empty()) {
ans++;
calc(bridge);
// 지나간 트럭은 다리에서 제거
bridge.erase(remove_if(bridge.begin(), bridge.end(), [](pair<int, int> n) {
return n.second == 0;
}), bridge.end());
// 다리에 트럭 추가
if (!q.empty() && (bridge.size() < w) && (check(bridge) + q.front() <= l)) {
bridge.push_back({q.front(), w});
q.pop();
}
}
cout << ans;
return 0;
}
경험? 깨닫은것?
처음에 코드를 작성할때 vector<pair<int, int>> 이것을 작성하기 싫어서 매개변수에 전부 auto키워드를 사용했는데
이렇게 하니 로컬에서 segmentation fault 자꾸 나서 수정 해주니 바로 해결되었다 auto 키워드를 사용 하는 것을
조금 지양하고 명확히 선언 해줘야 할 것 같다.