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


[ 알고리즘풀이 ]

1. 현재 주유소 가격보다 싼 가격의 주유소가 앞으로 있는지 순회합니다.

2. 있다면 그 주유소까지만 현재 주유소에서 기름을 채워서 이동합니다.

3. 없다면 끝까지 현재 주유소에서 기름을 채워서 이동합니다.

#include<iostream>

using namespace std;

int N, length[100000] = {}, price[100000] = {};

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	cin >> N;
	for (int i = 0; i < N - 1; i++)
		cin >> length[i];
	for (int i = 0; i < N; i++)
		cin >> price[i];
	
	long long ans = 0;
	int i = 0;
	while(i < N){
		int j = i + 1;
		long long l = 0;
		while (j < N) {
			l += length[j - 1];
			if (price[i] > price[j])
				break;
			j++;
		}
		ans += 1LL * l * price[i];
		i = j;
	}
	cout << ans;
}

 

+ Recent posts