티스토리 뷰

반응형

 

 

백준 문제 보기

출처 - 백준 공식 홈페이지

 

📌 문제 결과를 확인하자.

 

💡 소스 코드를 확인하자.

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

/*
문제 :
1km당 1리터 기름 사용
각 도시에 하나의 주유소 있음.
도시마다 리터당 가격 다름.(가격 단위 : 원)
각 도시 주유소 기름가격과, 도로 길이 입력받아 최소 비용 계산

입력 :
(내가 만든 예젠데 꼭 해보기) - 모든 조건 다 들어가있음.
8
1 2 1 2 1 2 1
3 2 5 3 4 6 1 2

 */
public class Q13305 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int city = Integer.parseInt(br.readLine());

        Long[] distance = new Long[city - 1];
        StringTokenizer st1 = new StringTokenizer(br.readLine());
        for (int i = 0; i < city - 1; i++) {
            distance[i] = Long.parseLong(st1.nextToken());
        }

        Long[] oilCost = new Long[city];
        StringTokenizer st2 = new StringTokenizer(br.readLine());
        for (int i = 0; i < city; i++) {
            oilCost[i] = Long.parseLong(st2.nextToken());
        }

        Long cost = 0L; // 비용
        for (int i = 0; i < city - 1; i++) {
            if(i<city-2) {
                if (oilCost[i]>oilCost[i+1]) {
                    cost += distance[i] * oilCost[i];
                }else {
                    cost += distance[i] * oilCost[i];
                    oilCost[i+1] = oilCost[i];
                }
            }else {
                if(oilCost[i-1] > oilCost[i]) {
                    cost += distance[i] * oilCost[i];
                }else {
                    cost += distance[i] * oilCost[i - 1];
                }
            }
        }
        System.out.println(cost);
    }
}

 

 

배열의 인덱스 문제로 i<city-2일 때와 아닐 때를 구분했고

현재 도시의 기름비용보다 다음 도시의 기름 비용이 비싸면(i<city-2 일때)

현재 도시에서 다음 도시까지 이동할 거리만큼만 구매한다.

(최소비용이므로 다음 도시에서 추가 구매하는게 더 싸니까)

 

현재 도시의 비용이 다음 도시의 기름 비용보다 싸면(i<city-2 일때)

현재 도시의 비용으로 거리를 계산 후

현재 도시의 비용을 다음 도시의 값에 넣는다.

(왜냐❓ 현재 도시의 비용이 싸니까 다음 for문 거리계산도 현재 도시 비용으로 해야하니까)

 

else의 경우

 if문 조건과 반대로 이전 도시의 기름값과 현재 도시의 기름값을 비교하면

문제를 해결할 수 있다.

 

 

😂 문제의 범위조건을 잘 확인하자.

int로 배열값을 설정했다가 에러가 많이 났었다.

반응형