백준 알고리즘/조건문

백준 2525번 :: 오븐 시계

Sun720 2022. 5. 18. 23:52

▶ 문제

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

 

2525번: 오븐 시계

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

www.acmicpc.net

 설명

시계 관련 문제이다.

첫번째 입력받은 현재시각은 StringTokenizer로 나눠주도록 할 것이다.

문제 풀이

🌱 풀이1.

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

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String nowTime = br.readLine(); //현재 시각 입력 값
		int cookDuration = Integer.parseInt(br.readLine()); // 조리시간 입력 값
		
		StringTokenizer strTo = new StringTokenizer(nowTime, " "); //현재 시각을 시와 분 단위로 쪼개기
		int hour = Integer.parseInt(strTo.nextToken()); //현재 시
		int min = Integer.parseInt(strTo.nextToken()); // 현재 분
		
		
		int nowAllMin = (hour * 60) + min;// 현재 시각을 시 단위가 아닌 분 단위로 변경하기.
		int sumMin = nowAllMin + cookDuration; // 현재 시각과 조리시간을 합치기.
		
		// 합쳐진 시간을 시와 분 단위로 변경하기.
		hour = sumMin / 60;
		min = sumMin % 60;
		
		// 시 단위가 23시를 초과했을 경우
		if (hour > 23) {
			hour -= 24;
		}
		
		System.out.println(hour + " " + min);
 	}
}

현재 시각을 분으로 바꿔주고, 조리시간을 더하면 오븐작동이 끝나는 시각을 얻어낼 수 있다.

분단위로 되어 있는 것을 hour=sumMin/60 와 min=sumMin%60 를 통해 시와 분으로 표현하도록 한다.

 

 

 

오답 코드

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

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String str = br.readLine(); // 첫 번째 줄 입력 값.
		int cookDuration = Integer.parseInt(br.readLine()); // 두 번째 줄 입력 값.
		
		// 첫 줄 입력 값을 공백 단위로 쪼개기. (시 분)
		StringTokenizer strTo = new StringTokenizer(str, " ");
		int hour = Integer.parseInt(strTo.nextToken());
		int min = Integer.parseInt(strTo.nextToken());
		
		// 분 단위의 조리시간을 시 단위로 변경하기.
		int cookHour = cookDuration / 60; // 조리시간 시 
		int cookMin = cookDuration - (cookHour * 60); // 조리시간의 분
		
		// System.out.println("조리시간 시 단위로 변경 : " + cookHour + ":"+ cookMin);
		
		int minSum = min + cookMin; // 현재 시각의 분 단위와 조리시간의 분 단위의 합. 
		
		//현재시간에서 조리시간을 더했을 때 분 단위가 60을 초과했을 경우
		if (minSum >= 60) {
			min = minSum - 60;
			hour++;
			
			int hourSum = hour + cookHour;
			if (hourSum > 23) {				
				hour = (hourSum) - 24;
			}else {				
				hour += cookHour; 
			}			
			System.out.println(hour + " " + min);			
		} 
		// 현재시간에서 조리시간을 더했을 때 분 단위가 60을 넘지 않을 경우.
		else {
			min += cookDuration;
			System.out.println(hour + " " + min);
		}
	}
}

처음 코드를 작성할 땐 현재 시각을 모두 분으로 변환하는 과정을 생각하지 못했기 때문에 조금 복잡했었다.

 

시각을 모두 분 단위로 만들고 마지막에 시와 분 단위로 만드는 것이 이 문제의 포인트였고, 이 사실만 알고 있어도 굉장히 쉬운 문제인 듯 하다.

 

728x90
반응형