Dev Hyeri

◖코딩 테스트◗▬▬▬▬▬▬▬▬▬/백준

[백준](2024) 소금 폭탄 (설명/코드/정답)

_hyeri 2024. 2. 20. 15:05

문제 링크 : https://www.acmicpc.net/problem/13223

 

 

난이도
알고리즘 
브론즈3 수학, 구현, 사칙연산

 

 

 

1. 요구 사항 이해

시간, 메모리 제한 : 2초 / 512MB

 

현재 시각으로부터 동작 시각까지의 인터벌을 구하시오 

 

현재 시각 hh:mm:ss 포맷 (0 ≤ h ≤ 23), (0 ≤ m ≤ 59) , (0 ≤ s ≤ 59)

소금 투하 시각 hh:mm:ss 

두 시각의 차이 (1초 ≤ interval ≤ 24시간)

 

 

 

 

2. 설계/검증 

입력

 

입력받은 시각을 파싱

- split() 사용 입력받은 시간 

 

차이 계산

 

음수 보정

 

시, 분, 초 변수를 출력 hh:mm:ss 포맷 형태로 출력

- System.out.printf("%02d:%02d:%02d", hh, mm, ss)

 

 

 

시간 복잡도  최악의 경우  공간 복잡도
O(1) -- O(1)

 

 

 

3. 정상 코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // Scanner 객체를 사용하여 입력값을 받음
        Scanner scanner = new Scanner(System.in);
        String currentTimeString = scanner.nextLine();
        String saltTimeString = scanner.nextLine();

        scanner.close();

        // 현재 기간과 소음이 투하될 시간을 파싱하여 시,분,초로 나눔
        String[] currentTimeArray = currentTimeString.split(":");
        int currentHour = Integer.parseInt(currentTimeArray[0]);
        int currentMinute = Integer.parseInt(currentTimeArray[1]);
        int currentSecond = Integer.parseInt(currentTimeArray[2]);

        String[] saltTimeArray = saltTimeString.split(":");
        int saltHour = Integer.parseInt(saltTimeArray[0]);
        int saltMinute = Integer.parseInt(saltTimeArray[1]);
        int saltSecond = Integer.parseInt(saltTimeArray[2]);

        // 현재 시각과 소금 투하 시간의 시, 분, 초 차이 계산
        int diffHour = saltHour - currentHour;
        int diffMinute = saltMinute - currentMinute;
        int diffSecond = saltSecond - currentSecond;

        // 초가 음수일 경우, 분에서 차감하고 60일 더해줌
        if (diffSecond < 0) {
            diffSecond += 60;
            diffMinute--;
        }
        // 분이 음수일 경우, 시에서 차감하고 60을 더해줌
        if (diffMinute < 0) {
            diffMinute += 60;
            diffHour--;
        }
        //시가 음수일 경우, 24를 더해줌
        if (diffHour < 0) {
            diffHour += 24;
        }

        // 결과를 형식에 맞추어 출력
        System.out.printf("%02d:%02d:%02d", diffHour, diffMinute, diffSecond);
    }
}

 

 

 

 

4. 처리 과정 추적 코드

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        String currentTimeString = scanner.nextLine();
        String saltTimeString = scanner.nextLine();

        scanner.close();
        System.out.println("\n[입력]----------------------------------");
        System.out.println("현재 시각 문자열 : " + currentTimeString);
        System.out.println("투하 시각 문자열 : " + saltTimeString);

        String[] currentTimeArray = currentTimeString.split(":");
        System.out.println("\n[파싱]----------------------------------");
        System.out.println("현재 시각 파싱 문자열 -> 배열 " + Arrays.toString(currentTimeArray));
        int currentHour = Integer.parseInt(currentTimeArray[0]);
        int currentMinute = Integer.parseInt(currentTimeArray[1]);
        int currentSecond = Integer.parseInt(currentTimeArray[2]);
        System.out.println("현재 시각. 시 : " + currentHour + ", 분 : " + currentMinute + ", 초 : " + currentHour);

        String[] saltTimeArray = saltTimeString.split(":");
        System.out.println("\n투하 시각 파싱 문자열 -> 배열 " + Arrays.toString(saltTimeArray));
        int saltHour = Integer.parseInt(saltTimeArray[0]);
        int saltMinute = Integer.parseInt(saltTimeArray[1]);
        int saltSecond = Integer.parseInt(saltTimeArray[2]);
        System.out.println("투하 시각. 시 : " + saltHour + ", 분 : " + saltMinute + ", 초 : " + saltSecond);

        int diffHour = saltHour - currentHour;
        int diffMinute = saltMinute - currentMinute;
        int diffSecond = saltSecond - currentSecond;
        System.out.println("\n[계산]----------------------------------");
        System.out.println("시각 차이. 시 : " + diffHour + "분 : " + diffMinute + "초 : " + diffSecond);


        System.out.println("\n[음수 보정]----------------------------------");
        System.out.println("초가 음수일 경우, 분에서 차감하고 60일 더해줌");
        System.out.println("시각 차이. 시 : " + diffHour + "분 : " + diffMinute + "초 : " + diffSecond);
        if (diffSecond < 0) {
            diffSecond += 60;
            diffMinute--;
            System.out.println("*음수 보정. 시 : " + diffHour + "분 : " + diffMinute + "초 : " + diffSecond);
        }

        System.out.println("\n분이 음수일 경우, 시에서 차감하고 60을 더해줌");
        System.out.println("시각 차이. 시 : " + diffHour + "분 : " + diffMinute + "초 : " + diffSecond);
        if (diffMinute < 0) {
            diffMinute += 60;
            diffHour--;
            System.out.println("*음수 보정. 시 : " + diffHour + "분 : " + diffMinute + "초 : " + diffSecond);
        }
        
        System.out.println("\n시가 음수일 경우, 24를 더해줌");
        System.out.println("시각 차이. 시 : " + diffHour + "분 : " + diffMinute + "초 : " + diffSecond);
        if (diffHour < 0) {
            diffHour += 24;
            System.out.println("*음수 보정. 시 : " + diffHour + "분 : " + diffMinute + "초 : " + diffSecond);
        }

        System.out.printf("\n결과 : %02d:%02d:%02d", diffHour, diffMinute, diffSecond);
    }
}