본문 바로가기

백준/JAVA

[Baekjoon/JAVA] 1408번 - 24

Baekjoon Online Judge

문제로 이동

 

문제

도현이는 Counter Terror Unit (CTU)에서 일하는 특수요원이다. 도현이는 모든 사건을 정확하게 24시간이 되는 순간 해결하는 것으로 유명하다. 도현이는 1시간 만에 범인을 잡을 수 있어도 잡지 않는다. 정확하게 24시간이 되는 순간이 아니면 잡지 않는 CTU 특수요원이다.

2008년 3월 3일 월요일, CTU는 새학기에 맞춰 핵폭탄을 날리겠다는 테러 정보를 입수했다. CTU에서는 특수요원 도현이에게 이 임무를 맡겼다. CTU의 프로그래머 준규는 이 사건의 배후가 김선영이란 것을 해킹을 통해 밝혀내었다.

도현이는 선영이를 임무를 시작한지 정확하게 24시간이 되는 순간에 잡으려고 한다.

만약 지금 시간이 13:52:30이고, 임무를 시작한 시간이 14:00:00 이라면 도현이에게 남은시간은 00:07:30 이다.

모든 시간은 00:00:00 ~ 23:59:59로 표현할 수 있다. 입력과 출력에 주어지는 모든 시간은 XX:XX:XX 형태이며, 숫자가 2자리가 아닐 경우에는 0으로 채운다.

도현이가 임무를 시작한 시간과, 현재 시간이 주어졌을 때, 도현이에게 남은 시간을 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에는 현재 시간이, 둘째 줄에는 도현이가 임무를 시작한 시간이 주어진다. 임무를 시작한 시간과 현재 시간이 같은 경우는 주어지지 않는다.

 

출력

첫째 줄에 도현이가 임무를 수행하는데 남은 시간을 문제에서 주어지는 시간의 형태 (XX:XX:XX)에 맞춰 출력한다.

 


예제 입력 예제 출력
13:52:30
14:00:00
00:07:30

풀이

import java.util.Scanner;

public class baekjoon1408 {
    // 입력한 시간을 초로 바꾼다.
    public static int second(String s) {
        String[] array = s.split(":");

        int num = 0; // 초

        // 시간을 초 단위로 변환
        for (int i = 0; i < 3; i++) {
            int n = Integer.parseInt(array[i]);

            for (int j = i; j < 2; j++) n *= 60;

            num += n;
        }

        return num;
    }

    // 임수 수행에 남은 시간을 입력한 형태로 변환해서 출력한다.
    public static void print(int n) {
        if (n < 0) {
            int day = second("24:00:00");
            n += day;
        }

        int t = n / 3600;           // 시간
        int m = (n % 3600) / 60;    // 분
        int s = (n % 3600) % 60;    // 초

        // 출력
        System.out.printf("%02d:%02d:%02d\n", t, m, s);
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        String now = in.next(); // 현재 시간
        String start = in.next(); // 도현이가 임무를 시작한 시간

        int time = second(start) - second(now); // 남은 시간

       print(time);
    }
}

second(string s)함수를 만들어서 입력한 시간을 초단위로 바꿨다. s.split(":")으로 :를 기준으로 문자열을 나눴고, 각 문자열을 int형으로 바꾼 뒤 시간이나 분, 초인지에 따라 60을 곱해서 num과 더하는 식으로 초를 구했다.

위를 함수를 이용해서 임무 시작 시간에 현재 시간을 빼는 연산을 했다.

 

그 뒤 초단위의 숫자를 입력한 형식으로 바꿔주는 함수 print(int n)을 만들어서 이용했다. 해당 함수에 입력된 n이 음수라면 24시간에 해당하는 초단위의 숫자를 더한 뒤 시간, 분, 초를 계산한 뒤 형식에 맞춰서 답을 출력되도록 했다. 이때 예를 들어 7시를 출력할 때 "07:00:00"처럼 0이 앞에 붙어야 하므로 %02d로 출력될 숫자의 자릿수를 지정해주었다.