B013:最遅出社時刻

JeongJaeSoon·2020년 12월 21일
0

Algorithm

목록 보기
2/2

問題

平日の朝、できるだけ長く寝ていたいと思ったあなたは、「何時に家を出発すれば遅刻せずに出社できるか?」ということを常々考えています。

あなたの通勤ルートは次のようになっています。

1. 自宅から配座(ぱいざ)駅まで a 分間歩く。
2. 配座駅に着いた後、一番早く来た電車に b 分間電車に乗って儀野(ぎの)駅に到着する。
 (駅に到着してから電車に乗り込むまでの時間は考慮せず、駅に到着した時刻の電車にも乗り込めるものとします)
3. 儀野駅から会社まで c 分間歩く。

あなたの会社では 8:59 までに出社すれば遅刻扱いにはなりません。 何時に自宅を出れば遅刻せずに出社できるでしょうか?
このような時間の中で最も遅い時刻を求めるプログラムを書いてください。

例えば、以下の入力例1の場合

入力例1
30 30 10
3
6 0
7 0
8 0

配座駅には 6:00, 7:00, 8:00 に電車が来ます。
7:30 に自宅を出れば 8:00 の電車に乗ることができて、8:40 に出社できます。
よって出力は以下のようになります。

出力例1
07:30

解決

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[] tmpTimes = line.split("\\s");
        int[] times = new int[tmpTimes.length];
        
        for(int i = 0; i < times.length; i++) {
            times[i] = Integer.parseInt(tmpTimes[i]);
        }
        
        int hour = 8;
        int minutes = 59;
        
        int trainHour = 0;
        int trainMinutes = 0;
        
        int requiredTime = times[1] + times[2];
        int tmpHour = requiredTime / 60;
        int tmpMinutes = requiredTime % 60;
        
        hour -= tmpHour;
        minutes -= tmpMinutes;
        
        if (minutes < 0) {
            hour -= 1;
            minutes += 60;
        }
        
        // Maginot Time
        // System.out.println(hour + " : " + minutes);
        
        int count = Integer.parseInt(sc.nextLine());
        
        // <<-- check train time table -->>
        for (int i = 0; i < count; i++) {
            String tmpTimeTable = sc.nextLine();
            String[] timeTable = tmpTimeTable.split("\\s");
            
            int hourTimeTable = Integer.parseInt(timeTable[0]);
            int minutesTimeTable = Integer.parseInt(timeTable[1]);
            
            if (hourTimeTable <= hour && minutesTimeTable <= minutes) {
                trainHour = hourTimeTable;
                trainMinutes = minutesTimeTable;
            }
        }
        
        trainMinutes -= times[0];
        
        if (trainMinutes < 0) {
            trainHour -= 1;
            trainMinutes += 60;
        }
        
        System.out.println(
            ((trainHour < 10) ? "0" + trainHour : trainHour) + ":" +
            ((trainMinutes < 10) ? "0" + trainMinutes : trainMinutes)
        );
    }
}
profile
Just Keep Coding... 🧑🏻‍💻

0개의 댓글