[BOJ] 13305번 주유소 - C++

"그리디 알고리즘"

Posted by Yongmin on June 14, 2021

문제

주유소

풀이

지나치는 주유소 마다 기존의 최솟값보다 크다면, 최솟값으로 다음 도시로 이동하는 만큼 주유를 하고, 최솟값보다 작으면 그 값으로 최솟값을 갱신하여 다음 도시로 이동하는 식으로 최솟값을 찾아냈다. 물론 현실적으로 도시를 지나쳤음에도 불구하고 최솟값 도시의 주유소에서 주유를 할 수 있다는 것이 말이 안되긴하다.

소스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <vector>
using namespace std;

int main(){
    int N;
    scanf("%d", &N);
    
    vector<long long> distance;
    long long distance_sum = 0;
    for(int i = 0; i<N-1; i++){
        long long input1;
        scanf("%lld", &input1);
        distance.push_back(input1);
        distance_sum = distance_sum + input1;
    }
    vector<long long> cost;
    for(int i = 0; i<N; i++){
        long long input2;
        scanf("%lld", &input2);
        if(i == N-1){
            break;
        }
        else cost.push_back(input2);
    }
    
    long long sum = 0;
    long long cost_current = 1000000001;
    for(int i = 0; i<N-1; i++){
        if(cost[i] < cost_current){
            cost_current = cost[i];
            sum = sum + cost_current * distance[i];
        }
        else{
            sum = sum + cost_current * distance[i];
        }
    }
    
    printf("%lld\n", sum);
    
    
    
    
}


# # #