https://www.acmicpc.net/problem/2884
45분 일찍 알람 맞추기
이거 어떻게 풀어야 할까...
시, 분 입력 받고
1. 분이 45보다 작으면 (시-1) : 60+(분-45)
2. 45보다 크면 시 : 분 - 45
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int h = sc.nextInt();
int m = sc.nextInt();
// 분이 45보다 작으면 (시-1) : 60+(분-45)
// 45보다 크면 시 : 분 - 45
if (m < 45)
h - 1;
60 + (m - 45);
System.out.println(h\tm);
else if (m > 45)
m - 45;
System.out.println(h\tm);
}
}
그냥 생각나는대로 이렇게 해보았다.
결과는 당연히 컴파일 에러...
문제점
1. 변수에 값을 할당하지 않았기 때문에 의미 없는 코드가 되어 오류가 발생함
- 'h-1'이 아닌 h=h-1 이렇게 해야됨!
2. h\tm는 잘못된 문법
- \t는 탭을 의미하는 이스케이프 문자지만, 여기서는 사용할 수 없음
3. if (m < 45)의 블록 {}를 생략했기 때문에 else if가 연결되지 않음.
- 자바에서는 if 바로 아래에 여러 줄을 쓸 경우 {}로 묶어줘야 함.
정리
| h - 1; | 연산 결과를 저장하지 않음 | h = h - 1; 또는 h--; |
| 60 + (m - 45); | 연산 결과를 저장하지 않음 | m = 60 + (m - 45); |
| System.out.println(h\tm); | \t 사용 오류 | System.out.println(h + " " + m); |
| m - 45; | 연산 결과를 저장하지 않음 | m = m - 45; |
| else if (m > 45) | if와 연결되지 않음 | {}로 감싸서 블록화 |
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int h = sc.nextInt();
int m = sc.nextInt();
// 분이 45보다 작으면 (시-1) : 60+(분-45)
// 45보다 크면 시 : 분 - 45
if (m < 45){
if (h == 0) { h = 23; }
else { h = h - 1; }
m = 60 + (m - 45);
System.out.println(h + " " + m);
}
else if (m >= 45){
m = m - 45;
System.out.println(h + " " + m);
}
sc.close();
}
}
**추가로 h=0인 경우를 고려해야 함
이렇게 풀어서 정답!
'IT > coding test' 카테고리의 다른 글
| [Java] 백준 - 2480 (1) | 2025.03.25 |
|---|---|
| [Java] 백준 - 2525 (0) | 2025.02.05 |
| [Java] 백준 - 14681 (0) | 2025.01.29 |
| [Java] 백준 - 2753 (0) | 2025.01.28 |
| [Java] 백준 - 9498 (0) | 2025.01.28 |