-
[백준/BOJ] 13305번 주유소 (C++)알고리즘 문제풀이/백준 2020. 12. 25. 21:40
그리디 유형의 문제입니다.
왼쪽에서 오른쪽 순서대로 도로를 건너갈 때, 현재 비용이 가장 작은 곳의 값에 각 도시를 연결하는 도로의 길이를 곱한 값을 더해주면 되는 문제입니다. 이를 위해 최소힙을 사용하였고, 한 가지 주의할 점은 문제에서 비용과 길이의 입력값이 굉장히 크므로, 더해지는 과정에서 int의 범위를 벗어나는 것을 방지하기 위해 long long으로 선언해줬습니다.
#include <iostream> #include <vector> #include <queue> using namespace std; int main(void) { ios_base::sync_with_stdio(false); cin.tie(0); int n; cin>>n; vector<long long> distance(n); priority_queue<long long, vector<long long>, greater<long long> > cost; // 최소힙 for(int i = 0; i < n - 1; i++) { cin>>distance[i]; } long long answer = 0; for(int i = 0; i < n; i++) { long long x; cin>>x; cost.push(x); answer += cost.top() * distance[i]; } cout<<answer; }
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준/BOJ] 11508번 2+1 세일 (C++) (0) 2020.12.27 [백준/BOJ] 14247번 나무 자르기 (C++) (0) 2020.12.26 [백준/BOJ] 2138번 전구와 스위치 (C++) (0) 2020.12.25 [백준/BOJ] 9019번 DSLR (C++) (0) 2020.12.23 [백준/BOJ] 1520번 내리막 길 (C++) (0) 2020.12.23