B055:タクシー料金

問題

PAIZAタウンでは、公共交通の手段としてタクシーが発達しています。
様々な料金のタクシーがあるため、初乗りが安くても最終的な運賃が高いタクシーを拾ってしまうかもしれません。

タクシーの運賃は初乗り距離と初乗り運賃、加算距離、加算運賃で決まります。
タクシーの乗車距離が初乗り距離未満の場合は、初乗り運賃だけで移動することができます。
初乗り距離と同じ距離だけ乗車した段階で、運賃に加算運賃が追加され、以後加算距離を移動する毎に加算運賃が追加されていきます。

あなたは今いる場所から X メートル離れた場所へ、 1 台のタクシーで移動しようとしています。
利用可能なタクシー N 台の料金のパラメータが与えられるので、タクシーで X メートル移動した際の最安値と最高値を計算してください。

例えば、 入力例 1 の場合は以下のように 600円 が最安値となり、 800円 が最高値となります。
1 番目のタクシーは初乗り距離以上なので加算距離 1 つ分が追加され 600円 かかります。
2 番目のタクシーは初乗り距離までで到着するので、初乗り運賃のみで 800円 かかります。

解決

import java.util.*;


public class Main {
    public static void main(String[] args) {
        // 自分の得意な言語で
        // Let's チャレンジ!!

        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        String[] values = line.split("\\s");
        
        int numOfTaxi = Integer.parseInt(values[0]);
        int distance = Integer.parseInt(values[1]);
        int minCharge = 0;
        int maxCharge = 0;
        
        for (int i = 0; i < numOfTaxi; i++) {
            String[] taxiInfo = sc.nextLine().split("\\s");
            
            // <<-- default -->>
            int defaultDistance = Integer.parseInt(taxiInfo[0]);
            int defaultCharge = Integer.parseInt(taxiInfo[1]);
            
            // <<-- addition -->>
            int additionDistance = Integer.parseInt(taxiInfo[2]);
            int additionCharge = Integer.parseInt(taxiInfo[3]);
            
            // <<-- result -->>
            int additionResult = 0;
            int chargeResult = 0;
            
            // check distance
            if (distance >= defaultDistance) {
                int remainDistance = distance - defaultDistance;
                int additionCount = (remainDistance + additionDistance) / additionDistance;
                additionResult = additionCount * additionCharge;
            }
            
            chargeResult = defaultCharge + additionResult;
            
            // <<-- minCharge -->>
            if (minCharge == 0) {
                minCharge = chargeResult;
            } else if (minCharge > chargeResult) {
                minCharge = chargeResult;
            }
            
            // <<-- maxCharge -->>
            if (maxCharge == 0) {
                maxCharge = chargeResult;
            } else if (maxCharge < chargeResult) {
                maxCharge = chargeResult;
            }
        }
        System.out.println(minCharge + " " + maxCharge);
    }
}

좋은 웹페이지 즐겨찾기