본문 바로가기

Algorithm

백준 1408 24 Java

24

친구가 풀어달라고 해서 오랜만에 풀어본 백준 문제이다.
구글에 검색해도 자바 풀이는 안 나온다고 해서 제일 먼저 올려보고픈 욕심에 풀이를 올려본다.😉

문제에서 핵심은 현재 시각이 임무 시작 시각보다 큰 경우를 처리하는 방식이다.

  • boolean 변수로 뺄셈 시 앞의 수를 빌려왔는지 체크한다.
  • 그리고 다음으로 넘어갔을 때 boolean 변수에 체크가 되어있으면 1을 빼주면 된다.
  • 빌려오는 경우에 hour면 24를 더해주고 minute, second면 60을 더해준다. 그리고 boolean 변수에 체크한다.

초심자 친구에게 최대한 쉽고 친절하게 알려주고 싶어서 api를 최대한 안쓰고 변수명을 한글로 지었다. 불편해도 이해해주시길..ㅎ

import java.util.Scanner;

public class Q1408 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String 첫번째입력 = scanner.nextLine();
        String 두번째입력 = scanner.nextLine();

        String[] 현재시각저장 = 첫번째입력.split(":");
        String[] 임무시작시각저장 = 두번째입력.split(":");
        String[] 정답저장 = new String[3];

        boolean 뺄셈시앞의수를빌려왔는지여부 = false;
        for (int i = 2; i >= 0; i--) {
            int 현재시각 = Integer.parseInt(현재시각저장[i]);
            int 임무시작시각 = Integer.parseInt(임무시작시각저장[i]);
            if (뺄셈시앞의수를빌려왔는지여부) {
                임무시작시각--;
            }
            if (임무시작시각 < 현재시각) {
                if (i == 0) { // hour인 경우
                    임무시작시각 += 24;
                } else {
                    임무시작시각 += 60;
                }
                뺄셈시앞의수를빌려왔는지여부 = true;
            } else {
                뺄셈시앞의수를빌려왔는지여부 = false;
            }
            int result = 임무시작시각 - 현재시각;
            if (result < 10) {
                정답저장[i] = "0" + result;
            } else {
                정답저장[i] = String.valueOf(result);
            }
        }
        System.out.println(정답저장[0] + ":" + 정답저장[1] + ":" + 정답저장[2]);
    }
}

'Algorithm' 카테고리의 다른 글

프로그래머스 구명보트 Java  (0) 2020.11.23
백준 1937 욕심쟁이 판다 Java  (0) 2019.12.10
좌표가 원의 범위안에 포함되어있는지 체크  (1) 2019.11.14
백준 10827 a^b Java  (0) 2019.11.01
백준 3055 탈출 Java  (1) 2019.10.24