본문 바로가기

알고리즘/백준

[백준 알고리즘 자바] 2525 : 오븐 시계

https://www.acmicpc.net/problem/2525

 

2525번: 오븐 시계

첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)

www.acmicpc.net


문제

  • KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 
  • 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 
  • 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 분 단위로 자동적으로 계산한다. 
  • 또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다. 
  • 훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오. 

입력

  • 첫째 줄에는 현재 시각이 나온다. 
  • 현재 시각은 시 A (0 ≤ A ≤ 23) 와 분 B (0 ≤ B ≤ 59)가 정수로 빈칸을 사이에 두고 순서대로 주어진다. 
  • 두 번째 줄에는 요리하는 데 필요한 시간 C (0 ≤ C ≤ 1,000)가 분 단위로 주어진다. 

출력

  • 첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. 
  • (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)

입출력 예제


풀이방식설계

1. 시와 분을 하나의 분으로 변환한다.

  • min = (hour * 60) + time

2. 변환한 분에 요리하는데 걸리는 시간을 더한다.

 

3. 위 과정을 통해 나온 결과값을 다시 시와 분으로 변환한다.

 

4. 결과를 출력한다.


풀이과정

1. 시와 분을 하나의 분으로 변환한다.

  • min = (hour * 60) + time

2. 변환한 분에 요리하는데 걸리는 시간을 더한다.

  • min += time

3. min을 60으로 나눠서 시간을 구한다. 단, 24시가 되었을 때에 시간이 0이 되어야 하므로 24로 나눈 나머지를 출력하도록 한다.

  • hour = (min / 60) % 24
  • hour가 24보다 작다면 본인의 값을 그대로 반환한다.

4. min을 60으로 나눈 나머지를 구해서 분을 구한다.

  • min = min % 60
  • 60으로 나눈 나머지를 구하면 60보다 작은 값이 출력되는 것이기에 우리가 원하는 결과값이 출력된다.

5. 결과를 출력한다.


답안소스

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

public class Main {
	static int hour, min, time;

	public void Cook(int hour, int min, int time) {
		min = (hour * 60) + min;
		min += time;
		
		hour = (min / 60) % 24;
		min = min % 60;
		
		System.out.println(hour + " " + min);
	}
	
	public static void main(String[] args) throws IOException {
		Main oven = new Main();
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		hour = Integer.parseInt(st.nextToken());
		min = Integer.parseInt(st.nextToken());
		
		st = new StringTokenizer(br.readLine());
		time = Integer.parseInt(st.nextToken());
		
		oven.Cook(hour, min, time);
	}
}