[백준 13305번 C/C++] 주유소

 

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

 

13305번: 주유소

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

www.acmicpc.net


 

해결전략

 

Greedy Algorithm 탐욕 알고리즘

 


 

코드

 

#include <iostream>
#include <vector>
using namespace std;

int n, tmp;
long long minCost;
vector<int> r;
vector<long long> c;

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

	cin >> n;
	r.resize(n-1);
	for (int i = 0; i < n - 1; i++) {
		cin >> r[i];
	}
	c.resize(n);
	for (int i = 0; i < n; i++) {
		cin >> c[i];
	}


	for(int i = 0; i < n; i++)
	{
		tmp = n-1;
		//가스 값이 더 싼 도시 찾기
		for(int j=i; j < n; j++){
			if(c[i] > c[j]){
				tmp = j;
				break;
			}
		}

		//다음 도시까지의 길이
		long long nextCity = 0;
		for (int k = i; k < tmp; k++) {
			nextCity += r[k];
		}
		

		//다음 도시까지 필요한 가스를 충전. 현재 도시 가스가격 * 다음 도시까지의 길이
		minCost += c[i] * nextCity;

		if (tmp < n - 1)
			i = (tmp - 1);
		else
			i = n - 1;
	}

	cout << minCost;

	return 0;
}

 

 


 

 

더 간단한 풀이

 

https://www.acmicpc.net/source/64197315#points

 

로그인

 

www.acmicpc.net