반응형
문제 링크:
<문제 풀이> 그리디 알고리즘
현재까지 발견한 가격들 중 최소의 주유 가격으로 다음 최소 주유 가격을 발견할 때까지 이동하는 것을 반복하면 그것이 최적의 해가 됩니다.
위 그림에서
최솟값 5에서 다음 최솟값을 갱신할 때까지 이동하면 다음 위치는 2
최솟값 2에서 다음 최솟값을 갱신할 때까지 이동하면 다음 위치는 1
구현할 때는 바로 다음 위치까지 이동하는 것이 아닌 도시를 하나씩 방문하면 됩니다.
방문할 때마다 현재까지 발견한 가격들 중 최소의 주유 가격을 임시 변수에 저장하고 있어야 합니다.
현재 도시에서 다음 도시로 이동할 때 드는 비용은 (최솟값*거리)가 됩니다.
<C++소스코드>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
int n;
ll price[100000];
ll dist[100000];
int main() {
ios_base::sync_with_stdio(false);
cin >> n;
for (int i = 0; i < n - 1; i++) {
cin >> dist[i];
}
for (int i = 0; i < n; i++) {
cin >> price[i];
}
ll ans = price[0] * dist[0]; //처음에는 기름을 모두 넣고 다음 도시까지 간다.
ll cur = price[0]; //현재까지 방문한 도시들의 주유 가격 중 최솟값
for (int i = 1; i < n - 1; i++) {
if (price[i] >= cur) { // 더 작은 주유 값을 발견하지 못하면
ans += dist[i] * cur; // 현재까지 방문한 주유 최솟값으로 다음 도시로 이동
}
else { // 더 작은 주유 값을 발견하면
cur = price[i]; // 최솟값 갱신
ans += dist[i] * cur; // 최소 주유 값으로 다음 위치까지 이동
}
}
cout << ans;
return 0;
}
|
cs |
반응형
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 1890번] 점프 (0) | 2023.04.19 |
---|---|
[백준 1758번] 알바생 강호 (0) | 2023.04.19 |
[백준 11055번] 가장 큰 증가하는 부분 수열 (0) | 2023.04.18 |
[백준 14916번] 거스름돈 (0) | 2023.04.12 |
[백준 9465번] 스티커 (2) | 2023.04.12 |