본문 바로가기

BOJ 길라잡이

[C/C++ 백준 13305번] 주유소 (Silver 4)

www.acmicpc.net/problem/13305

 

13305번: 주유소

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

www.acmicpc.net

있는 그대로 구현해주는 것이 관건이다. 차가 가면서 거리를 저장해두었다가, 더 싼 주유소를 만나면 이전 주유소의 가격으로 왔던 거리를 모두 계산해주면 풀 수 있다. 

 

#include <cstdio>
int main(void){
	int N;
	scanf("%d", &N);
	int road[N], price[N];
	for(int i=0; i<N-1; i++)
		scanf("%lld", &road[i+1]);
	for(int i=0; i<N; i++)
		scanf("%lld", &price[i]);
	long long int car = 1, nprice=price[0], dis = 0, ans=0;
	while(car<=N){
		dis += road[car];
		if(car==N){
			ans += dis*nprice;
		}
		else if(nprice>price[car]){
			ans += dis*nprice;
			dis = 0;
			nprice = price[car];
		}
		car++;
	}
	printf("%lld", ans);
}