알고리즘/BOJ

[BOJ] 13305. 주유소

재담 2022. 3. 30. 01:06

문제 원본 : 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