문제
백준 조건문 단계 중 다섯 번째 문제입니다.
대충 '입력 받은 시간보다 45분 앞 시간을 표현하라'는 문제입니다.
입력받은 시간이 45분보다 작은 00시 00분 ~ 00시 44분 사이라면, 24시간을 더해줘야겠습니다.
나중에 유지보수하기 쉽도록 45분을 상수화 시켜서 조건을 주겠습니다.
풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// Scanner 선언
Scanner sc = new Scanner(System.in);
// 시간 및 분 입력받기 & 상수 선언
int H = sc.nextInt();
int M = sc.nextInt();
final int ALARM_TIME = 45; // 알람을 45분 앞으로
final int DAY_MIN = 60 * 24; // 하루를 분으로 치환
// 입력받은 시간 - 45분 계산하여 출력하기
/**
* 생각하기
*
* 하루는 00시 00분 ~ 23시 59분이며, 이는 분으로 통합하면 0분 ~ 1439분으로 표현 가능하다.
*
* 만일 입력받은 시간이 0 ~ 44분 사이라면, 알람 시계는 입력받은 시간 - 45분(알람 설정 시간) + 1440분(하루)이 되어야 하고,
* 입력받은 시간이 45분 ~ 1439분이라면, 알람 시계는 입력받은 시간 - 45분(알람 설정 시간)이 되어야 한다.
*
*/
// 알람의 시간
int totalAlarm = 0; // 알람 시계의 총 시간(분)
int totalMin = H * 60 + M; // 현재 시간을 분으로 치환
if(totalMin < ALARM_TIME) { // 현재 시간 - 45분 + 1440분으로 계산
totalAlarm = totalMin - ALARM_TIME + DAY_MIN;
} else { // 현재 시간 - 45분으로 계산
totalAlarm = totalMin - ALARM_TIME;
}
int alarmHour = totalAlarm / 60; // 알람 시계의 시
int alarmMin = totalAlarm % 60; // 알람 시계의 분
// 결과 출력
System.out.println(alarmHour + " " + alarmMin);
// Scanner close
sc.close();
}
}