알람 시계 풀이
2023. 6. 12. 10:23ㆍBaekJoon/조건문
문제내용
사용자에게 시, 분을 입력받아 45분 전으로 결과를 출력하는 문제이다.
단, 하루의 시작은 0:0이고 끝은 23:59이다.
풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt();
int num2 = sc.nextInt()-45;
if(num2 < 0){
if(num1 == 0){
num1 = 23;
}else {
num1 -= 1;
}
num2 += 60;
}
System.out.println(num1);
System.out.println(num2);
}
}
사용자에게 시:분을 입력받기 위해 Scanner를 사용해 num1과 num2에 각각 입력받았다.
num2를 분으로 생각하고 입력받은 수에서 45를 빼고 그 수가 0보다 크면 바로 출력을 하고 0보다 작을 때는 시간을 조율을 했다. 만약 시간이 0이라면 전날의 시간이 와야하기 때문에 23이 와야하고 그것이 아니라면 시간에서 1시간을 빼줬다. 그리고 분에서 60분을 더해줬다.
글쓴이가 한 방법 이외에 정말 많은 방법이 있을 것이다. 다른 방법, 더 좋은 성능의 코드가 있으면 댓글로 공유해주시길..
겪었던 문제
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt();
int num2 = sc.nextInt();
if(num2 - 45 < 0){
if(num1 - 1 > 0){
num1--;
num2 = 60 + num2 - 45;
}else {
num1 = 23;
num2 = 60 + num2 - 45;
}
}else{
num1 --;
num2 -= 45;
}
System.out.println(num1);
System.out.println(num2);
}
}
처음에는 위와 같이 풀었었는데 제출했을 때 틀렸다는 결과를 반환받았다. 어떤 로직이 잘못되었을까 곰곰히 생각해봤을 떄 num2 - 45 < 0가 true일때 if문을 들여다보면 num1 - 1 > 0이 아닌 else에 들어갈때 문제가 생기는데 예를 들면 1시 25분이라고 가정해보면 첫 if문에 충족하게 되고 그 안에 else문에 충족하게된다. 즉 1시일땐 0시가 되어야 하지만 23시가 되어버리는 것이다.
이처럼 모든 상황을 고려해서 풀었다고 하더라도 생각치 못한 상황이 발생할 수 있다. 그렇기에 테스트 케이스를 최대한 많이 확인해보는 것이 좋다. 물론 글쓴이도 테스트 케이스를 늘리지 않고 예제 출력만을 보고 풀지만...😂