[백준] 13305번 : 주유소 자바(Java)

ShinDasom·2023년 5월 31일

문제

각 도시에 있는 주유소의 기름 가격과, 각 도시를 연결하는 도로의 길이를 입력으로 받아 제일 왼쪽 도시에서 제일 오른쪽 도시로 이동하는 최소의 비용을 계산하는 프로그램을 작성하시오.

입력

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1개의 자연수로 주어진다. 다음 줄에는 주유소의 리터당 가격이 제일 왼쪽 도시부터 순서대로 N개의 자연수로 주어진다. 제일 왼쪽 도시부터 제일 오른쪽 도시까지의 거리는 1이상 1,000,000,000 이하의 자연수이다. 리터당 가격은 1 이상 1,000,000,000 이하의 자연수이다.

출력

표준 출력으로 제일 왼쪽 도시에서 제일 오른쪽 도시로 가는 최소 비용을 출력한다.

접근방식 및 풀이

첫번째 도시에서는 무조건 주유소에서 다음도시까지의 거리 만큼 주유를 해야한다. 따라서 최솟값(min)을 도시의 가격을 담은 city[0]으로 초기화한다. 그 이후 다음 도시의 가격인 city[i]와 min을 비교하여 min의 값이 더 크다면 city[i]를 min으로 지정한다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {
	
	
	public static void main(String[] args) throws IOException{
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int cityNum = Integer.parseInt(br.readLine());
		
		long km[] = new long[cityNum-1];
		
		long city[] = new long[cityNum];
		
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		for(int i =0; i<km.length;i++) {
			km[i]=Long.parseLong(st.nextToken());
		}
		st = new StringTokenizer(br.readLine(), " ");
		for(int i =0; i<city.length;i++) {
			city[i]=Long.parseLong(st.nextToken());
		}
		
		long sum = 0;
		long min = city[0];
		for(int i =0; i<km.length; i++) {
			if(city[i]<min) {
				min = city[i];
			}
			sum += (min*km[i]);
		}
		
		System.out.println(sum);

	}
	

	
}

0개의 댓글