
처음에 이 문제를 보고
시(H)를 분(m)으로 바꿔서 계산 후
다시 시(H), 분(m)으로 바꾸면 되겠다는 생각을 했다.
처음에 풀었을 때는
import java.util.Scanner;
public class B2884 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int h = sc.nextInt(); // 시간
int m = sc.nextInt(); // 분
if (h == 0)
h = ((24*60+m)-45)/60;
else
h = ((h*60 + m)-45)/60;
m = ((h*60 + m)-45)%60;
System.out.print(h + " ");
System.out.print(m);
}
}
알고보니 예외가 있었다..!
0 과 59를 넣었을 때 24 14로 결과가 나온다.
또한 분에 -도 나오기 때문에 고쳐야 한다!
import java.util.Scanner;
public class B2884 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int h = sc.nextInt(); // 시간
int m = sc.nextInt(); // 분
int time = ((h * 60 + m) - 45); // 분으로 치환
if (h == 0) { // h가 0 이면 24시간으로 바꿔서 계산
h = ((24 * 60 + m) - 45) / 60;
m = ((h * 60 + m) - 45) % 60;
}
else { // 그게 아니면
h = time / 60;
m = time%60;
}
if (h == 24) // 24시로 나오면 0으로 바꿔주기
h = 0;
System.out.print(h + " ");
System.out.print(m);
}
}
이 방법 말고 다른 방법으로 풀어보자!
- 분(M)을 기준으로 45보다 작으면 시(H)를 -1 해주고
- 이때 시(H)가 0보다 작아지면 H = 23으로 바꿔준다.
- 분(M)이 45보다 크면 그냥 M-45!
import java.util.Scanner;
public class B2884_1 {
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 = 60-(45-m);
if(h < 0)
h = 23;
System.out.print(h + " " + m);
}else {
System.out.print(h + " " + (m-45));
}
}
}
처음에 풀었던 방법보다 훨씬 간결하고 보기 좋은 방법으로 풀 수 있었다!