주유소 << 문제 클릭!
: 먼저 맨 처음 주유소에서 모든 거리를 커버하는 경우의 가격을 배열에 담는다.
: 주유소를 하나씩 추가해서 min(기존 배열에 있던 가격, 새롭게 주유소를 추가했을 때 가격)을 비교해서 작은 값으로 update 한다.
✅ 주유소를 하나씩 추가하면서 해당 주요소 가격X거리에 해당하는 금액을 update하는 방식
#include <iostream>
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int N = 0; // 주유소 개수
cin >> N;
int* d = new int[N - 1]; // 거리 저장
int* total = new int[N - 1]; // 최종 금액
for (int i = 0; i < N - 1; i++) {
cin >> d[i]; // 값 저장
}
//초기화
int temp = 0; // 임시 주요소 금액
int num = 0; // 최소 주요소 금액
cin >> temp; // 처음 주요소 가격 받기
total[0] = temp * d[0]; // 금액 저장
num = d[0]; // 해당 주요소 저장
for (int i = 1; i < N - 1; i++) {
cin >> temp;
if (num * d[i] > temp * d[i]) { // 새로 upate된 주유소가 더 값이 적으면
total[i] = total[i - 1] + temp * d[i]; // 업데이트
num = temp; // 주요소도 바꾸기
}
else {
total[i] = total[i - 1] + num * d[i];
}
}
cout << total[N - 2]; // 마지막 금액
delete[] d; // 할당 해제
delete[] total;
}
✅ 문제 원인
#include <iostream>
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int N = 0; // 주유소 개수
cin >> N;
int* d = new int[N - 1]; // 거리 저장
int sum = 0;
for (int i = 0; i < N - 1; i++) {
cin >> d[i]; // 값 저장
}
//초기화
int temp = 0; // 임시 주요소 금액
int num = 0; // 최소 주요소 금액
cin >> temp; // 처음 주요소 가격 받기
sum += temp * d[0]; // 금액 저장
num = temp; // 해당 주요소 저장
for (int i = 1; i < N - 1; i++) {
cin >> temp;
if (num * d[i] > temp * d[i]) { // 새로 upate된 주유소가 더 값이 적으면
sum += temp * d[i]; // 업데이트
num = temp; // 주요소도 바꾸기
}
else {
sum += num * d[i];
}
}
cout << sum; // 마지막 금액
delete[] d; // 할당 해제
}
✅ 문제 원인
#include <iostream>
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
long long int N = 0; // 주유소 개수
cin >> N;
long long int* d = new long long int[N - 1]; // 거리 저장
long long sum = 0;
for (int i = 0; i < N - 1; i++) {
cin >> d[i]; // 값 저장
}
//초기화
long long int temp = 0; // 임시 주요소 금액
long long int num = 0; // 최소 주요소 금액
cin >> temp; // 처음 주요소 가격 받기
sum += temp * d[0]; // 금액 저장
num = temp; // 해당 주요소 저장
for (int i = 1; i < N - 1; i++) {
cin >> temp;
if (num * d[i] > temp * d[i]) { // 새로 upate된 주유소가 더 값이 적으면
sum += temp * d[i]; // 업데이트
num = temp; // 주요소도 바꾸기
}
else {
sum += num * d[i];
}
}
cout << sum; // 마지막 금액
delete[] d; // 할당 해제
}