[백준] 2884번 : 알람시계 - Java

Yecron·2022년 10월 29일

처음에 이 문제를 보고
시(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);

    }
}

이 방법 말고 다른 방법으로 풀어보자!

  1. 분(M)을 기준으로 45보다 작으면 시(H)를 -1 해주고
  2. 이때 시(H)가 0보다 작아지면 H = 23으로 바꿔준다.
  3. 분(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));
        }

    }
}

처음에 풀었던 방법보다 훨씬 간결하고 보기 좋은 방법으로 풀 수 있었다!

0개의 댓글