Algorithm/BOJ

[BOJ]13305 - 주유소 (C++)

꾸지새미언니 2022. 1. 5. 15:20

문제

https://www.acmicpc.net/problem/13305

코드

#include <iostream>
#include <algorithm>

using namespace std;

long long km[100000];
long long pr[100000]; 

int main(){
    cin.tie(0), cout.tie(0);
    ios_base::sync_with_stdio(0);

    long long total = 0; 
    int n;
    cin >> n; 
    for(int i=0; i<n-1; i++){
        cin >> km[i];
    }
    for(int i=0; i<n; i++){
        cin >> pr[i];
    }

    long long pr_now = pr[0]; 
    for (int i=1; i<n; i++){
        if(pr_now > pr[i]){
            total += pr_now * km[i-1];
            pr_now = pr[i];
        } else{
            total += pr_now * km[i-1];
        }
    }

    cout << total; 
}

풀이

이 문제는 처음에 어떻게 접근해야 하는지 감이 안잡혀서 삽질을 조금 했다...
가격을 저장한 배열에서 현재 가격을 pr_now라고 놓고 그 앞 인덱스의 가격이 더 작으면 현재 가격으로 거리를 계산하고 가격을 더 작은 값으로 바꿔준다.
km[i-1]번째를 곱하는 이유는 현재 보고 있는 기름 값(pr[i])까지 가기 위해서는 그 전에 있는 값 중 가장 작은 기름 값(pr_now)을 거리(km[i-1])에 곱해야 하기 때문이다.