<문제 제시>
<예시 입출력>
<문제 해결 과정>
시계, 시간과 관련된 문제를 풀이할때는 항상 느끼는 것이 100 단위 기준으로 다음 단위로 넘어가는 것이 아닌 60을 기준으로 사용한다는 것이다. 이를 변환해주는 과정이 필요했다.
처음에는 예시 예제 입력, 출력이 다양한 것을 보고 저 예제들에 다 통과될만큼 조건문을 만들면 되지 않을까 싶었다.
<처음 작성한 오답 코드>
// 1. 입력받은 '분'이 0분일 때
if(m <= 0) {
m = m - 45;
h--;
m = 60 - Math.abs(m);
System.out.println(h + " " + m);
}
// 2. 입력받은 '시간'이 0시일 때
else if(h == 0) {
m = m - 45;
h = 24; // h를 24시로 변환
h--;
m = 60 - Math.abs(m);
System.out.println(h + " " + m);
}
// 3. 입력받은 '분'이 45분일 때
else if(m == 45) {
m = 0; // 45분을 차감하면 0분
h = 24;
h--;
System.out.println(h + " " + m);
}
// 4. 일반적으로 위에 속하지 않는 경우
else if(m > 0) {
m = m - 45;
h--;
m = 60 - Math.abs(m);
System.out.println(h + " " + m);
}
처음에는 코드가 길더라도 이러한 방식으로 적어주었다. Math.abs를 통해 절대값을 도출할 수 있었고,
만약
m = m - 45;
// m(분)
연산에서 음수가 나오게 되면 Math.abs를 통해 연산이 가능한 양수로 바꿔주는 것이었다.
하지만 이는 오답이었고, 조금 찾아본 결과 Math.abs를 사용하지 않아도 연산이 가능한 것을 알 수 있었다.
예상외로 간단한 로직이었다. 크게는 두가지로 나뉘는데, 주어진 m(분) 이 45보다 작을 경우와 아닐 경우이다.
45보다 작을 경우에는 음수가 되는 경우인데, 이는
if(m < 45) {
h--;
m = 60 - (45 - m);
if(h < 0) {
h = 23;
}
System.out.println(h + " " + m);
}
m = 60 - (45 - m); 연산으로 60분 기준으로 차감된 시간을 알 수 있었다.
h--; (= h 1감소)를 통해 음수가 나올 경우 시간이 차감되는 것을 구현하였다.
세부적으로 조건을 더 달 수 있었는데, 만약 h(시간)이 0보다 작을 경우이다..
이는 h를 23으로 초기화줌으로써 24시에서 h--; (=h 1감소)된 경우를 처리할 수 있다.
또 다른 문 경우는
else {
System.out.println(h + " " + (m - 45));
}
else 문인데, 여기서는 특수한 경우가 아닌 일반적인 경우 출력되는 조건이다.
m이 45보다 작지 않는한 단순히 m - 45를 한 값을 출력해주면 되는 것이다.
<전체코드>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 2884번 : 알람 시계
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] time = br.readLine().split(" ");
int h = Integer.parseInt(time[0]); // 시간(24)
int m = Integer.parseInt(time[1]); // 분(60)
if(m < 45) {
h--;
m = 60 - (45 - m);
if(h < 0) {
h = 23;
}
System.out.println(h + " " + m);
}
else {
System.out.println(h + " " + (m - 45));
}
}
}
코드풀이를 하면서 60분 기준으로 연산을 어떻게 해야할까 고민이었는데,
m = 60 - (45 - m)이라는 간단한 수식을 통해 처리가 가능하였다.
0시 0분이나 24시 30분에서 45분이 차감되었을 경우 23시 45분 등을 처리할 수 있어야했는데,
조건문을 여러 개 구현해서 답을 도출할 수 있었다.
참고)
https://st-lab.tistory.com/24
문제링크)
https://www.acmicpc.net/problem/2884
'Algorithms > 백준' 카테고리의 다른 글
[백준] 2480번 '주사위 세개' - Java (0) | 2022.09.05 |
---|---|
[백준] 2525번 '오븐 시계' - Java (0) | 2022.09.04 |
[백준] 2753번 '윤년' - Java (0) | 2022.09.02 |
[백준] 10172번 '개' - Java (2) | 2022.09.01 |
[백준] 10430번 '나머지' - Java (0) | 2022.08.31 |