본문 바로가기
컴퓨터 공학/백준

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

by kim-dev 2024. 2. 23.
반응형


글이 되게 길고 무슨 이미지까지 포함돼 있어서 복잡해 보이는 문제이긴 한데
사실 굉장히 간단하고 쉬운 문제였다!!

 

거리와 리터당 가격을 입력받은 후, 가격 배열을 처음부터 끝까지 돌면서 cost[i]가 최소값일 경우에는 sum(총 비용)에 cost[i]를 더해주면 되고, 최소값이 아닐 경우에는 이전의 최소값 min을 더해주면 된다.

 

사실 이 문제가 서브태스크가 존재하는 문제였는데, 처음에는 100점이 아니라 58점이 뜨던 것...
아니 뭐가 문제인지 봤는데 알고보니 총 거리가 10억이라서, 가격이 3만 넘어가면 바로 int 타입은 오버플로우가 되던 것이었다! 그래서 int를 모두 long으로 바꿔주고 100점을 받을 수 있었다...

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Arrays;
import java.util.Comparator;
import java.lang.StringBuilder;

public class Gasstation {

    public static int stoi(String str) {
        return Integer.parseInt(str);
    }

    public static long stol(String str) {
        return Long.parseLong(str);
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = stoi(br.readLine());

        long[] distance = new long[N-1];
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i=0; i<N-1; i++) {
            distance[i] = stoi(st.nextToken());
        }

        long[] cost = new long[N];
        StringTokenizer st2 = new StringTokenizer(br.readLine());
        for(int i=0; i<N; i++) {
            cost[i] = stoi(st2.nextToken());
        }

        long sum = 0;
        long min = Long.MAX_VALUE;
        for (int i=0; i<N-1; i++) {
            min = Math.min(min, cost[i]);
            sum = sum + (min * distance[i]);
        }

        System.out.println(sum);
    }
}
 

로그인

 

www.acmicpc.net