[JAVA] 백준 3029 - 경고

K-AKABANE·2023년 4월 12일
0

백준(Java)

목록 보기
3/3
post-thumbnail

문제

창영마을에서 정인이의 반란은 실패로 끝났다. (3028번)
테러리스트로 변신한 정인이는 창영마을에 경고를 하려고 한다.
사실 정인이는 창영마을에서 제일 착한사람이다. 따라서, 사람들을 다치지 않게하려고 한다.
유튜브에서 폭발에 대한 동영상을 찾아보다가, 그는 나트륨을 물에 던지면 폭발한다는 사실을 알게 되었다.

정인이는 창영마을의 중심을 지나는 "강산강" 근처에 숨어있다가, 나트륨을 위의 동영상처럼 물에 던질 것이다.

현재 시간과 정인이가 나트륨을 던질 시간이 주어졌을 때, 정인이가 얼마나 숨어있어야 하는지 구하는 프로그램을 작성하시오. (정인이는 적어도 1초를 기다리며, 많아야 24시간을 기다린다.)

입력

첫째 줄에 현재 시간이 hh:mm:ss 형식으로 주어진다. (시, 분, 초) hh는 0보다 크거나 같고, 23보다 작거나 같으며, 분과 초는 0보다 크거나 같고, 59보다 작거나 같다.

둘째 줄에는 나트륨을 던질 시간이 위와 같은 형식으로 주어진다.

출력

첫째 줄에 정인이가 기다려야 하는 시간을 입력과 같은 형식으로 출력한다.

코드

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String time1[] = br.readLine().split(":");
		String time2[] = br.readLine().split(":");

		int hour = Integer.parseInt(time2[0]) - Integer.parseInt(time1[0]);
		int min = Integer.parseInt(time2[1]) - Integer.parseInt(time1[1]);
		int sec = Integer.parseInt(time2[2]) - Integer.parseInt(time1[2]);

		while(sec < 0) {
			sec += 60;
			min--;
		}
		while(min < 0) {
			min += 60;
			hour--;
		}
		while(hour < 0) {
			hour += 24;
		}

		if(hour==0&&min==0&&sec==0)
			hour = 24;

		System.out.printf("%02d:%02d:%02d\n", hour, min, sec);
	}
}

풀이

처음에 단순한 시간 계산 문제로 생각하고 풀었더니 오답이 나왔다.

문제 조건을 잘 읽어보면, '정인이는 적어도 1초를 기다리며, 많아야 24시간을 기다린다.'라고 되어있다. 그러므로 입력된 두 시간의 차이가 0일 때 0초를 기다리는 것이 아니라 24시간을 기다려야 하는 것이다.

따라서 기본적인 시간 계산 알고리즘을 적용하되, 결과값이 '00:00:00'일 때 '24:00:00'을 출력하도록 하는 코드를 추가해야 한다.

우선 br.readLine()으로 문자열을 입력받은 다음 split 메소드를 통해 ":"을 기준으로 나누어 2개의 문자열 배열로 저장하고 두 배열의 같은 인덱스의 문자열을 정수로 형변환하여 두 수의 차를 구한 다음, 이를 각각 hour, min, sec 변수에 저장하였다.

이후부터는 각 단위가 음수일 경우 그 윗 단위를 내림하여 값을 보정해주는 알고리즘을 작성하였고 앞서 말했듯 세 변수의 값이 모두 0일 때 hour의 값을 24로 바꿔주는 코드를 추가하였다.

마지막으로 출력 형식을 맞추기 위해 문자열 포맷팅을 사용하여 각 정수마다 2자리를 확보한 다음 빈 자리에는 0을 추가하도록 하였다.

결과

문제 링크

백준 3029 - 경고

profile
Java is my life

0개의 댓글