본문 바로가기
PS/백준

[백준] 주유소 - 13305 Java

by 진꿈청 2024. 4. 8.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    /**
     * 주유소
     * 주유소 마다 리터강 가격이 주어지며 주유소 사이에 거리가 주어진다.
     * 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다.
     * 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1개의 자연수로 주어진다.
     * 다음 줄에는 주유소의 리터당 가격이 제일 왼쪽 도시부터 순서대로 N개의 자연수로 주어진다.
     * 제일 왼쪽 도시부터 제일 오른쪽 도시까지의 거리는 1이상 1,000,000,000 이하의 자연수이다.
     * 리터당 가격은 1 이상 1,000,000,000 이하의 자연수이다.
     * long으로 계산해야 할 듯. 또한, 그리디적으로 생각했을 때 다음 주유소로 갈 수 있을 만큼만 당장 충전
     *
     * 입력 예)
     * 4
     * 2 3 1
     * 5 2 4 1
     *
     * 출력 예)
     * 18
     */
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());

        long[] road = new long[N - 1];
        long[] oil = new long[N];

        StringTokenizer st = new StringTokenizer(br.readLine());

        for(int i = 0; i < N - 1; i++){
            road[i] = Long.parseLong(st.nextToken());
        }

        st = new StringTokenizer(br.readLine());

        for(int i = 0; i < N; i++){
            oil[i] = Long.parseLong(st.nextToken());
        }

        long result = 0;

        long min_oil = oil[0];
        // 일단 현재 주유소에서 다음 주유소로 갈만큼은 충전.
        // 그 후, 도착한 주유소의 가격이 지금 가격보다 비싸면 이전 가격 적용 아님 교체
        for(int i = 0; i < N - 1; i++){
            min_oil = Math.min(min_oil, oil[i]);
            result += min_oil * road[i];
        }

        System.out.println(result);
    }
}

'PS > 백준' 카테고리의 다른 글

[백준] 해킹 - 28283 Java  (0) 2024.04.08
[백준] ATM - 11399 Java  (0) 2024.04.08
[백준] 오아시스 재결합 - 3015 Python  (2) 2024.03.04
[백준] 두 배열의 합 - 2143 Java  (0) 2024.02.18
[백준] 색종이 붙이기 - 17136 Java  (0) 2024.02.18