![[백준] 2884 - 알람 시계](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6Pwc7%2FbtsyBjsaO6E%2FHIVcd4KKk9TQcw8o4KSwvk%2Fimg.png)
• 문제


알람 시계를 맞추되, 45분 앞당겨서 알람을 설정하는 문제이다.
시간은 00:00 ~ 24:00 표기법을 사용하며
주의할 점은 문제의 예제입력 2와같이 0:30을 입력했을 때 23:45으로 출력되는 부분이다.
• 풀이
먼저 단순하게 생각하여 문제에 요구되는 조건을 조건식으로 표현해서 풀자면,
문제를 풀기위해 생각해야하는 경우의 수는 3가지가 있다.
1. M이 45보다 크거나 같을 때
2. M이 45보다 작을 때
3. H가 0으로 입력되고 M이 45보다 작을 때
1의 경우에는 가장 간단하다 H는 가만히 냅두고 M만 45만큼 빼주면된다.
2의 경우에는 M이 45보다 작으므로 H의 값을 1빼고나서 M의 값을 계산해주어야한다.
3의 경우에는 00:00시에서 1시간만큼빼면 23시이므로 H가 0이면 H를 23으로 바꿔주어야한다. M은 2의 케이스로 똑같이 계산해주면된다.
1의 계산식을 세우면 M = M - 45 이고 이 식은 else문으로 넣어줄 것이기때문에 조건식은 따로 세우지 않아도된다.
2의 계산식을 세우면 H = H - 1, M = M + 60 - 45이다. 조건식은 M < 45이다.
3의 계산식을 세우면 H = 23, M = M + 60 - 45이다. 조건식으로는 H==0 && M<45가 된다.
이것들을 종합하여 코드로 짜보자
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int H = sc.nextInt();
int M = sc.nextInt();
if(H==0 && M<45) { //3
H = 23;
M = M + 60 - 45;
}else if(M<45) { //2
H = H-1;
M = M + 60 - 45;
}else //1
M = M-45;
System.out.println(H + " " + M);
}
}
출력문은 시간과 분사이에 공백이 있기때문에 " "를 넣어줘야 정답처리를 받을 수 있다.
위의 코드를 보면 중복되는 코드가 너무 많다는걸 알 수 있다. 중복되는 코드를 제거해서 코드를 좀 더 단순하게 만들어보면 아래와 같이 확인할 수 있다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int H = sc.nextInt();
int M = sc.nextInt();
if(M<45) {
H--;
M = M + 60 -45;
if(H <0) {
H = 23;
}
}
else {
M = M - 45;
}
System.out.println(H + " " + M);
}
}
필자는 아직 초보라 그런지 아래코드 보다는 위에 코드가 좀더 머릿속에 잘 들어오는 느낌이 든다.
중복코드를 줄이고 시간을 덜 잡아먹는 코드를 사용하는 것은 매우 중요하지만 공부하는 과정이기때문에 일단은 이해가 쉬운 코드를 사용하는 것이 좋다고 생각한다.
•마무리
문제를 어떤식으로 풀어야할지 모르겠다면 먼저 종이와 펜으로 먼저 풀어보고 하나씩 차근차근 풀어나가는게 중요한 것 같다.
종이에 적어가며 이 때는 어떻게 식을 만들어야하는지, 조건식은 어떻게 만들어야하는지 천천히 코딩을 해보자
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2480 - 주사위 세 개 (1) | 2023.10.17 |
---|---|
[백준] 2525 - 오븐 시계 (1) | 2023.10.17 |
[백준] 14681 - 사분면 고르기 (0) | 2023.10.16 |
[백준] 2753 - 윤년 (1) | 2023.10.15 |
[백준] 9498 - 시험성적 (0) | 2023.10.15 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!