새소식

반응형
Language/알고리즘

백준 BaekJoon 3029번: 경고 [Java] 자바

  • -
반응형

2020-11-20


문제

창영마을에서 정인이의 반란은 실패로 끝났다. (3028번)

테러리스트로 변신한 정인이는 창영마을에 경고를 하려고 한다.

사실 정인이는 창영마을에서 제일 착한사람이다. 따라서, 사람들을 다치지 않게하려고 한다.

유튜브에서 폭발에 대한 동영상을 찾아보다가, 그는 나트륨을 물에 던지면 폭발한다는 사실을 알게 되었다.

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

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

입력

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

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

출력

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


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TemplateA {
    public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String start = br.readLine();
		String end = br.readLine();
		
		int [] arrS = new int [6];
		int [] arrE = new int [6];
		int countS = 0;
		int countE = 0;
		
		for(int i = 0; i < 6; i++) {
			if(start.charAt(i) != 58) {
				arrS[countS] = start.charAt(i) - '0';
				countS++;

			}
			
			if(end.charAt(i) != 58) {
				arrE[countE] = end.charAt(i) - '0';
				countE++;
			}
		}
		
		int hourS = arrS[0] * 10 + arrS[1];
		int minuteS = arrS[2] * 10 + arrS[3];
		int secondS = arrS[4] * 10 + arrS[5];
		
		int hourE = arrE[0] * 10 + arrE[1];
		int minuteE = arrE[2] * 10 + arrE[3];
		int secondE = arrE[4] * 10 + arrE[5];
		
		
		int second = 0;
		if(secondS <= secondE) {
			second = secondE - secondS;
		}else {
			second = (60 - secondS) + secondE;
			minuteS += 1;
		//시작하는 초단위가 끝나는 초단위 보다 작은경우 분 올림 발생
		}
		//초단위 체크
		
		int minute = 0;
		if(minuteS <= minuteE) {
			minute = minuteE - minuteS;
		}else {
			minute = (60 - minuteS) + minuteE;
			hourS += 1;
		//시작하는 분단위가 끝나는 초단위 보다 작은경우 분 올림 발생	
		}
		//분단위 체크
		
		
		if(hourS >= 25) {
			hourS = 24;
			hourE--;
		}
		//24시간이 넘어가는 경우 24시간으로 초기화 시켜주고
		//끝나는 시간을 -- 해줌
		
		
		int hour = 0;
		if(hourS <= hourE) {
			hour = hourE - hourS;
		}else {
			hour = (24 - hourS) + hourE;
		}
		//시간단위 체크
		
		String hourW;
		if(hour < 10) {
			hourW = '0' + Integer.toString(hour);
		}else {
			hourW = Integer.toString(hour);
		}
		String minuteW;
		if(minute < 10) {
			minuteW = '0' + Integer.toString(minute);
		}else {
			minuteW = Integer.toString(minute);
		}
		String secondW;
		if(second < 10) {
			secondW = '0' + Integer.toString(second);
		}else {
			secondW = Integer.toString(second);
		}
		//각 단위마다 10 이하인지 체크
		
		
		System.out.println(hourW +":" +minuteW+ ":" +secondW);
    }
}

출처링크: www.acmicpc.net/problem/3029

 

3029번: 경고

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

www.acmicpc.net

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.