https://www.acmicpc.net/problem/13305
import java.io.BufferedReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main_13305 {
public static void main(String[] args) throws IOException {
int N;
long[] distance;
long[] price;
long minPrice;
long totalPrice = 0;
// N = 4;
// distance = new int[]{2, 3, 1};
// price = new int[]{5, 2, 4, 1};
BufferedReader br = new BufferedReader(new java.io.InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
distance = new long[N - 1];
price = new long[N];
StringTokenizer distanceSt = new StringTokenizer(br.readLine());
for(int i = 0; i < N - 1; i++) {
distance[i] = Integer.parseInt(distanceSt.nextToken());
}
StringTokenizer priceSt = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++) {
price[i] = Integer.parseInt(priceSt.nextToken());
}
// 내림차순일때만 주유한다. 일단 내림차순인지 확인을 해야겠지?
// price가 지점이고 두 price 사이의 distance가 있어야지.
minPrice = price[0];
for(int i = 0; i < N - 1; i++) {
long currentPrice = price[i]; // 현재 주유소의 가격
// 최소 금액보다 작은 경우에만 주유한다. 아닐 경우 기존의 최소 금액으로 주유하면 된다.
if(minPrice > currentPrice) {
// 주유한다. currentPrice * distance[i] 만큼 주유한다.
// totalPrice += currentPrice * distance[i];
// 현재 가격을 최소 가격으로 지정한다.
minPrice = currentPrice;
}
totalPrice += minPrice * distance[i];
}
System.out.println(totalPrice);
}
}
서브테스크라서 정답/오답이 아닌 부분 정답 결과도 나오는 문제였다.
처음에 로직을 틀려서 오답, 로직만 맞아서 58점,
int형에서 long으로 고쳐서 100점을 받았다.
정답률은 낮은데 막상 알게되면 회의실보다 쉬운 문제라고 생각한다.
minPrice 변수를 생각해내지 못한 것이 원인이었다.
중요한 것은 기존 가격, 즉 최소 가격의 숫자만 알면 되는데
굳이 꼭 이전, 다음 요소에 집착해서 indexOutOfException을 많이 냈다.
아직도 풀기에 급급해서 int, long 판단까지는 못 미치는듯.