문제 원본 : https://www.acmicpc.net/problem/13305
13305번: 주유소
표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1
www.acmicpc.net
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int[] dist = new int[n - 1];
int[] price = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < n - 1; ++i) {
dist[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; ++i) {
price[i] = Integer.parseInt(st.nextToken());
}
long ans = 0;
int min = price[0], sum = 0;
for (int i = 1; i < n; ++i) {
sum += dist[i - 1];
if (min > price[i]) {
ans += (long) min * sum;
min = price[i];
sum = 0;
}
}
ans += (long) min * sum;
bw.write(String.valueOf(ans));
bw.close();
br.close();
}
}
- 그리디 알고리즘
- 현재 도시보다 기름 가격이 낮은 도시가 나올 때까지는 현재 도시에서 기름을 넣는다.
- 마지막 도시의 기름 가격이 최솟값이 아니라면 마지막 도시까지의 비용을 더해주지 않으므로
- 반복문이 끝나고 더해준다.
'알고리즘 > BOJ' 카테고리의 다른 글
| [BOJ] 1004. 어린 왕자 (0) | 2022.04.01 |
|---|---|
| [BOJ] 1620. 나는야 포켓몬 마스터 이다솜 (0) | 2022.03.31 |
| [BOJ] 9184. 신나는 함수 실행 (0) | 2022.03.29 |
| [BOJ] 2504. 괄호의 값 (0) | 2022.03.28 |
| [BOJ] 15663. N과 M (9) (0) | 2022.03.27 |