풀이 및 해설(주석) [파이썬]

import sys

N = int(sys.stdin.readline())
dist = list(map(int, sys.stdin.readline().strip().split()))
citys = list(map(int, sys.stdin.readline().strip().split()))

# 첫 번째 도시에서는 무조건 다음 도시로 이동할 거리만큼 기름을 채워야 한다.
rst = dist[0] * citys[0]
# 현재 기름 가격은 0번째 city
now_price = citys[0]
# 현재 위치 == 거리
now = 0

for i in range(1, N-1):
    now = dist[i]
    # 다음 도시의 가격이 현재 가격보다 낮으면 그 가격으로 기름을 채움
    if citys[i] < now_price:
        now_price = citys[i]
        rst += now * now_price
    # 아니라면 다녀온 도시 중 가장 싼 곳의 가격으로 기름을 구매
    else:
        rst += now_price * now

print(rst)

 

풀이 [자바]

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(bf.readLine());

        int[] city = new int[N-1];
        int[] cost = new int[N];

        StringTokenizer st = new StringTokenizer(bf.readLine());
        for (int i = 0; i < N-1; i++) {
            city[i] = Integer.parseInt(st.nextToken());
        }
        st = new StringTokenizer(bf.readLine());
        for (int i = 0; i < N; i++) {
            cost[i] = Integer.parseInt(st.nextToken());
        }

        long rst = (long) cost[0] * city[0];

        long minCost = cost[0];
        for (int i = 1; i < N-1; i++) {
            long nowCost = cost[i];
            long nowDist = city[i];
            if (minCost > nowCost) {
                minCost = nowCost;
            }
            rst += ((long) nowDist * minCost);
        }

        System.out.println(rst);
    }
}
복사했습니다!