본문 바로가기
코딩테스트 준비/백준

[백준] 1408번 - 24 [Java]

by mwzz6 2025. 1. 5.

https://www.acmicpc.net/problem/1408

 

[백준] 1408번 - 24 [Java]
[백준] 1408번 - 24 [Java]


1.  아이디어

 

StringTokenizer를 통한 파싱을 활용하면 간단하게 해결할 수 있다.


2. 문제풀이

 

StringTokenizer에서 구분자를 콜론 기호로 설정해서 시, 분, 초를 파싱할 수 있다. 임무를 시작한 시간과 현재 시간 모두 파싱해서 초 단위로 변환했고 두 시간의 차를 다시 StringBuilder로 양식에 맞게 출력하는 방식으로 구현했다.

다만 현재 시간이 임무를 시작한 시간보다 이전 시간처럼 표시되는 경우를 고려해서 하루를 보정해줘야 한다.


3. 코드

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();

        int time1 = getTime(br.readLine());
        int time2 = getTime(br.readLine());

        int time = time2 > time1 ? time2 - time1 : time2 - time1 + 86400;
        int h3 = time / 3600;
        int m3 = time % 3600 / 60;
        int s3 = time % 60;

        if (h3 < 10) sb.append("0");
        sb.append(h3).append(":");

        if (m3 < 10) sb.append("0");
        sb.append(m3).append(":");

        if (s3 < 10) sb.append("0");
        sb.append(s3);

        bw.write(sb.toString());
        bw.flush();
    }

    private static int getTime(String time) {
        StringTokenizer st = new StringTokenizer(time, ":");
        int h = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        int s = Integer.parseInt(st.nextToken());
        return h * 3600 + m * 60 + s;
    }

}

4. 후기