<문제 제시>
<예시 입출력>
<문제 해결 과정>
백준 2884번 : 알람 시계와 비슷하게 '시간'을 다루는 문제이다.
알람 시계에서는 45분을 일찍 일어나야해서 -45를 해주는 것이 있었다면
이번 오븐 시계에서는 조리 후의 시간을 알려주는 시계를 만드는 것이므로 + m (분) 을 해주어야한다.
<처음 작성한 오답 코드>
int total = m + ing;
if(m < ing) {
h++;
if(total == 120) {
h++;
m = 0;
}
else if(h >= 24) {
h = h - 24;
}
else if(m >= 60) {
m = 60 - m;
}
m = 60 - (total);
m = Math.abs(m);
if(m == 60) {
m = 0;
}
System.out.println(h + " " + m);
}
else {
if(h >= 24) {
h = h - 24;
}
else if((total) >= 60) {
h++;
m = 60 - (total);
m = Math.abs(m);
if(h == 24) {
h = 0;
}
total = m;
}
System.out.println(h + " " + (total));
}
먼저 변수는 h = 현재 시각 m = 현재 분, ing = 조리 시간, total = 현재 시각으로부터 조리 시간 후의 분 으로 정해주었다.
이번에도 예제 입력과 출력이 다양한 것을 보고 그 조건들에 다 부합하게 만들면 되지 않을까 싶었다.
처음 m < ing는 조리시간보다 현재 시각이 작은 경우 일반적으로 처리되는 조건을 만들었는데,
그 안에 세부적으로 총 걸린 분(m)이 120이 되면 h++ 을 한번 더 해준 후 분(m)은 0을 만들어주는 것을 만들었다.
또한 시간이 25시 처럼 24시이거나 24시를 초과하게된다면 24를 빼주어 연산을 해보았다.
60분 기준이므로 m = 60 - m 경우도 그 경우였다.
코드가 복잡해졌지만 여러 조건을 입력하다보니 예제들이 통과되는 것을 확인할 수 있었고,
채점을 받아봤지만, '오답' 이었다.
코드가 긴 것도 문제였지만 효율적인 코드는 없을까하고 다른 블로그를 참고해보았다.
참고한 결과 시간과 분을 통합한 후 연산한 후에 다시 시간과 분으로 바꿔주는 방식이 효과적일 것 같았다.
int min = a * 60 + b;
을 통해 시간 x 60 으로 분(m)으로 연산 후 현재 분(m)을 더해서 총 분(m)을 만들 수 있었다.
int min = a * 60 + b;
min = min + c;
여기에 조리시간까지 더하면 이제 연산할 준비가 끝난 것이다.
딱히 조건문이 필요없이 조리시간까지 더한 이 데이터를 연산해주면 되는 것이었다.
<전체코드>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] time = br.readLine().split(" ");
String m = br.readLine();
int a = Integer.parseInt(time[0]); // 시간(24)
int b = Integer.parseInt(time[1]); // 분(60)
int c = Integer.parseInt(m); // 걸리는 시간
// 시, 분을 통합하는 방법
int min = a * 60 + b;
min = min + c;
int hour = (min / 60) % 24; // 24시 이상일 경우를 고려
int minute = min % 60;
System.out.println(hour + " " + minute);
}
}
시간은 (min / 60) 으로 시간을 만든 후 % 24 를 처리해주어 24시간을 기준으로 나머지가 시간으로 지정되도록 한다.
분은 min % 60 으로 60분을 기준으로 나머지가 분으로 지정되도록 한다.
참고)
https://st-lab.tistory.com/292
문제링크)
https://www.acmicpc.net/problem/2525
'Algorithms > 백준' 카테고리의 다른 글
[백준] '과제 안 내신 분..?' - Java (0) | 2023.05.18 |
---|---|
[백준] 2480번 '주사위 세개' - Java (0) | 2022.09.05 |
[백준] 2884번 '알람 시계' - Java (0) | 2022.09.03 |
[백준] 2753번 '윤년' - Java (0) | 2022.09.02 |
[백준] 10172번 '개' - Java (2) | 2022.09.01 |