▶ 문제
https://www.acmicpc.net/problem/2884
2884번: 알람 시계
상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만,
www.acmicpc.net
▶ 설명
조건문을 이용한 시계의 시/분을 다루는 문제이다.
시계는 24시 & 60분 단위로 표시되기 때문에 익숙한 10진수 체계에서 벗어나 생각해야 한다.
일어나야 할 시각의 분 단위가 45 미만일 경우 45분 전으로 알람을 맞추게 되면 시 단위는 1시간 아래로 내려가게 된다.
반대로, 분 단위가 45분~59분일 경우엔 45분 전으로 알람을 맞추어도 시 단위는 1시간 아래로 내려가지 않고 그대로일 것이다.
이렇게 시 단위가 1시간 내려가나 안내려가냐를 기준으로 크게 if ~ else 문을 만들 수 있다.
일어나야 할 시각의 분 단위가 45분 미만일 때 시 단위와 분 단위가 모두 바뀌게 된다.
먼저 시 단위는 0시 일 경우 23시로 시 단위가 내려가야 하고,
분 단위는 - (마이너스) 값이 나오지 않도록 일어나려는 시각의 분을 45에서 뺀 뒤, 60분에서 한 번 더 빼주도록 한다.
예제에서처럼
10:10 에 일어나려고 할 때 45분 전으로 알람을 맞추려고 한다면,
10분을 가리키고 있으므로 45분 이전은 60분 - (45분 - 10분) 을 연산하여 25분이라는 것을 구할 수 있고,
시 단위는 10에서 1을 뺀 9시라는 것을 알아낼 수 있다.
그럼 최종적으로 9:25이 된다.
▶ 문제 풀이
🌱 풀이
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();
StringTokenizer strTo = new StringTokenizer(str, " ");
int h = Integer.parseInt(strTo.nextToken());
int m = Integer.parseInt(strTo.nextToken());
// 분침이 45분 이하일 경우 시침이 1개 내려가고, 분침은 60-(45-현재분) 로 이동한다.
if (m < 45) {
// 0시일 경우
if (h == 0) {
h = 23;
}else {
h -= 1;
}
m = 60-(45-m);
}
// 분침이 45분 이상일 경우 (46~59분), 시침은 그대로이고 분침만 내려간다.
else {
m -= 45;
}
System.out.println(h + " " + m);
}
}
▶ Log
처음엔 단순한 문제라고만 생각했는데 코드로 만들려고 보니 그다지 쉽지만은 않았다.
조건 분기를 적절히 해야 하는데 조건이 늘어날 수록 머리 속이 복잡해지는 느낌이 들었다.
복잡한 것 같아서 노트에 말로 적어가면서 하니 그나마 해결하는 데 도움이 되었다.
'백준 알고리즘 > 조건문' 카테고리의 다른 글
백준 2408 :: 주사위 세개 [JAVA] (0) | 2022.05.19 |
---|---|
백준 2525번 :: 오븐 시계 (0) | 2022.05.18 |
백준 14691번 :: 사분면 고르기 (0) | 2022.05.17 |
백준 9498번 :: 시험 성적 (0) | 2022.05.16 |
백준 1330번 :: 두 수 비교하기 (0) | 2022.05.16 |