Baekjoon/Silver

C++ / 백준 / 13305 / 주유소

GitHubSeob 2023. 7. 4. 18:28
문제

 

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

 

13305번: 주유소

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1

www.acmicpc.net

문제풀이

 

1번 도시를 지나쳐 2번 도시에 도착했는데 기름의 가격이 더 비쌀 수도 있다.

그런 경우는 다시 1번 도시에서 기름을 채우면 된다. 이런 식으로 문제를 풀면 된다.

 

변수를 만들어 기름의 최소가격을 도시에 도착할 때마다 갱신하고, 도로의 길이만큼 최소 가격을 곱하면 된다.

 

 

코드
#include <iostream>
#include <vector>
#define MAX 1000000000
#define ll long long
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	ll idx(0), N(0), min_price(MAX), answer(0);
	cin >> N;
	vector<ll>road(N - 1, 0);
	vector<ll>price(N, 0);

	for (idx = 0; idx < N - 1; ++idx) {
		cin >> road[idx];
	}
	for (idx = 0; idx < N; ++idx) {
		cin >> price[idx];
	}

	for (idx = 0; idx < N - 1; ++idx) {
		min_price = min(min_price, price[idx]);
		answer += min_price * road[idx];
	}

	cout << answer;
}