IT/coding test

[Java] 백준 - 2884

돔녕 2025. 1. 29. 01:08

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