반응형
문제
철수는 화학 시험을 망치고, 애꿎은 화학 선생님에게 복수를 하기로 한다.
철수는 집에서 만든 자동 로봇 팔을 선생님의 책상에 숨겨, 선생님이 수업을 시작하려 들어온 순간 숨겨놓은 로봇 팔을 이용해 선생님을 혼내주려고 한다. 철수는 선생님이 늘 애용하는 물컵에 시간이 되면 로봇팔이 소금을 잔뜩 집어넣도록 프로그램을 짜려고 한다.
철수는 현재시각과 선생님이 언제 컵을 사용할지 시간을 알고 있지만, 수 계산에 정말 약해서 로봇 팔에 입력해야 할 시간 계산을 못한다. 철수가 로봇 팔에 알맞은 시간을 입력할 수 있도록 도와주자.
입력
첫째 줄에는 현재 시각이 hh:mm:ss로 주어진다. 시간의 경우 0≤h≤23 이며, 분과 초는 각각 0≤m≤59, 0≤s≤59 이다.
두 번째 줄에는 소금 투하의 시간이 hh:mm:ss로 주어진다.
출력
로봇 팔이 소금을 투하할 때까지 필요한 시간을 hh:mm:ss로 출력한다. 이 시간은 1초보다 크거나 같고, 24시간보다 작거나 같다.
입출력 예제
알고리즘❓풀어내기❗️
도출해 낸 문제 : HH:MM:SS 포맷의 두 시각의 차이를 HH:MM:SS 포맷으로 출력하기
- ':' 문자를 기준으로 시간, 분, 초를 쪼갠다.
- 두 시간, 분, 초의 차이를 계산한다. (현재 시각으로부터 투하 시각까지 필요한 시간)
- 구해진 시간을 HH:MM:SS 형태로 출력한다.
💬 생각해야 할 점
- 두 시각의 차이는 투하 시각에서 현재 시각을 빼서 구할 수 있다. 하지만 현재 시간이 날이 바뀌면 투하 시각이 현재 시각보다 앞설 수 있다. (시간이 음수가 된다.)
- 계층적으로 표현되는 각 단위를 계산할 때, 가장 작은 단위로 통일하면 더 편할 수 있다.
- 출력 시간은 00:00:00이 될 수 없다.
🧑🏻💻 코드 리뷰
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] currentTime = sc.next().split(":");
String[] dropTime = sc.next().split(":");
int currentHour = Integer.parseInt(currentTime[0]);
int currentMinute = Integer.parseInt(currentTime[1]);
int currentSecond = Integer.parseInt(currentTime[2]);
int currentSecondAmount = currentHour * 3600 + currentMinute * 60 + currentSecond;
int dropHour = Integer.parseInt(dropTime[0]);
int dropMinute = Integer.parseInt(dropTime[1]);
int dropSecond = Integer.parseInt(dropTime[2]);
int dropSecondAmount = dropHour * 3600 + dropMinute * 60 + dropSecond;
int needSecondAmount = dropSecondAmount - currentSecondAmount;
if (needSecondAmount <= 0)
needSecondAmount += 24 * 3600;
int needHour = needSecondAmount / 3600;
int needMinute = (needSecondAmount % 3600) / 60;
int needSecond = needSecondAmount % 60;
System.out.printf("%02d:%02d:%02d", needHour, needMinute, needSecond);
}
}
▶ String[] currentTime = sc.next().split(":") : 시간을 입력받을 때 문자열 배열로 선언한다. split() 함수를 사용하여 ":" 를 기준으로 배열을 나눈다.
▶ int currentHour = Integer.parseInt(currentTime[0]) : 문자열을 정수형으로 변환한다.
▶ int currentSecondAmount = currentHour * 3600 + currentMinute * 60 + currentSecond : 각 단위를 가장 작은 단위인 '초'로 통일한다. [💬 생각해야 할 점]
▶ if 문 : 두 시각의 차가 만약 0보다 작거나 같다면 하루를 더해준다. [💬 생각해야 할 점]
'ALGORITHM > 백준' 카테고리의 다른 글
[JAVA] 백준 5622 - 다이얼 (1) | 2024.03.23 |
---|---|
[JAVA] 백준 1152 - 단어의 개수 (1) | 2024.03.23 |
[JAVA] 백준 1543 - 문서 검색 (0) | 2024.03.07 |
[JAVA] 백준 1157 - 단어 공부 (0) | 2024.03.06 |
[JAVA] 백준 1919 - 애너그램 만들기 (1) | 2024.03.06 |