▶ 문제
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
반응형
'백준 알고리즘 > 조건문' 카테고리의 다른 글
백준 2408 :: 주사위 세개 [JAVA] (0) | 2022.05.19 |
---|---|
백준 2884번 :: 알람 시계 (0) | 2022.05.18 |
백준 14691번 :: 사분면 고르기 (0) | 2022.05.17 |
백준 9498번 :: 시험 성적 (0) | 2022.05.16 |
백준 1330번 :: 두 수 비교하기 (0) | 2022.05.16 |