백준(JAVA) 풀이/그리디 알고리즘

백준(JAVA) 13305번 주유소 풀이

개발윗미 2022. 10. 29. 10:02

Java으로 구현한 13305번 주유소 문제 풀이입니다.

 

https://www.acmicpc.net/problem/13305

 

13305번: 주유소

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1

www.acmicpc.net


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

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		int n = Integer.parseInt(br.readLine());
		long[] distance = new long[n-1];
		long[] price = new long[n];
		
		st = new StringTokenizer(br.readLine());
		for (int i=0; i<n-1; i++)
			distance[i] = Long.parseLong(st.nextToken());
		
		st = new StringTokenizer(br.readLine());
		for (int i=0; i<n; i++)
			price[i] = Long.parseLong(st.nextToken());
		
		long curr = price[0];
		long result = 0;
		for (int i=0; i<n-1; i++) {
			if (curr > price[i])
				curr = price[i];
			result += curr * distance[i];
		}
		
		System.out.println(result);
		
	}
}

 

1. 첫번째 주유소는 무조건 가야하므로 curr에 첫번째 주유소의 리터당 가격을 할당한다.

 

2. n - 1까지의 범위로 반복문을 수행하는데, 현재 확인하고 있는 가격과 curr을 비교한 후, curr이 더 크다면 현재 확인하고 있는 가격으로 갱신한다.

 

3. curr에 현재까지의 최소 비용이 담겨져 있으므로, 현재 확인하고 있는 거리 값(distance[i])에 curr을 곱하여 result에 누적한다.

 

4. 반복문이 종료되면 최종적으로 result를 출력한다.