13305 - 주유소 - 그리디알고리즘
문제
문제링크 : https://www.acmicpc.net/problem/13305
풀이전략
- 제일 왼쪽도시에서 제일 오른쪽 도시로 이동하는동안 최소의 비용을 계산해야한다. 즉 기름을 사는데 사용할 돈의 최소값이다.
- 다음 도시가 현재 도시보다 용량이 작은 기름이 나올때까지 계속 다음 도시를 확인한다. 만약 더 작은 기름이 나온다면 이전까지 지나왔던 도로의 길 * 기름값 만큼 더해주며 이 과정을 반복하며 목적지까지 간다.
- long long을 써주는 것을 주의해야한다.
코드
#include<cstdio>
#include<vector>
using namespace std;
int main(){
// freopen("../input.txt","rt",stdin);
int N;
scanf("%d",&N);
vector<int> road;
vector<int> oil;
int tmp;
for(int i=0; i<N-1; i++){
scanf("%d",&tmp);
road.push_back(tmp);
}
for(int i=0; i<N; i++){
scanf("%d",&tmp);
oil.push_back(tmp);
}
long long res = 0;
// 시작점처리해준다.
int oilPrice = oil[0];
long long roadCnt = road[0];
// 가장 왼쪽부터 오른쪽 까지 다음 오일값이 작은 값이 나올때까지 길을 더해준다.
// 더 작은 값이 나온다면 이제 지금까지 저장된 값을 res에 추가해주고, 새로운 oilPrice로 for문을 진행한다.
for(int i=1; i<N; i++){
if(oilPrice < oil[i]){
roadCnt += road[i];
}
else{
res += oilPrice * roadCnt;
roadCnt = road[i];
oilPrice = oil[i];
}
}
res += oilPrice * roadCnt;
printf("%lld\n",res);
return 0;
}
소감
항상 long long을 주의해야한다! 또한 문제가 길었지만 그럼에도 핵심만 잡으면 쉽게 해결할 수 있다.
Author And Source
이 문제에 관하여(13305 - 주유소 - 그리디알고리즘), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gomster_96/백준-13305-주유소-그리디알고리즘저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)