알람 시계 풀이

2023. 6. 12. 10:23BaekJoon/조건문

문제내용

사용자에게 시, 분을 입력받아 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시가 되어버리는 것이다. 

이처럼 모든 상황을 고려해서 풀었다고 하더라도 생각치 못한 상황이 발생할 수 있다. 그렇기에 테스트 케이스를 최대한 많이 확인해보는 것이 좋다. 물론 글쓴이도 테스트 케이스를 늘리지 않고 예제 출력만을 보고 풀지만...😂

'BaekJoon > 조건문' 카테고리의 다른 글

주사위 세개 풀이  (0) 2023.06.12
오븐 시계 풀이  (0) 2023.06.12
사분면 고르기 풀이  (0) 2023.06.12
윤년 풀이  (0) 2023.06.12
시험 성적 풀이  (0) 2023.06.12