알고리즘

C++ 알고리즘 - 13305 주유소

마루설아 2025. 2. 10. 14:27

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

 

#include <bits/stdc++.h>
#define endl "\n"

using namespace std;

/******** 전역변수 ********/


/******** 함    수 ********/


int main(void) {
	/******** C++ INIT ********/
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	/******** 지역변수 ********/
	int input1;
	long long num;
	long long answer = 0;
	long long i, j;
	vector<long long> distance;
	vector<long long> liter;

	/******** 구    현 ********/
	cin >> input1;

	for (i = 0; i < input1 - 1; i++) {
		cin >> num;
		distance.push_back(num);
	}

	for (i = 0; i < input1; i++) {
		cin >> num;
		liter.push_back(num);
	}

	// 첫 주유소는 무조건 주유를 해야하기 때문에 첫 거리 리터당 주유금액 계산
	answer += distance[0] * liter[0];

	for (i = 0; i < liter.size() - 1;) {
		for (j = i + 1; j < liter.size() - 1; j++) {
			// 다음 목적지의 주유금액이 더 비싸다면 이전 주유소에서 주유
			if (liter[i] < liter[j]) {
				answer += distance[j] * liter[i];
				continue;
			}

			// 다음 목적지의 주유금액이 더 싸다면 다음 행선지로 출발
			else {
				i = j;
				break;
			}
		}

		// 목적지에 도달하지 않은 상태인지 검증 / 아직 목적지가 아니라면 주유
		if (j < distance.size()) answer += distance[j] * liter[i];
		else break;
	}

	cout << answer;
}