(Java) 백준 2884번 - 알람 시계

코딩너구리·2026년 1월 13일

코딩 문제 풀이

목록 보기
154/266

https://www.acmicpc.net/problem/2884

문제

> 상근이는 매일 아침 알람을 듣고 일어난다.
> 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다.
> 상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다.
> 이런 상근이를 불쌍하게 보던 창영이는 자신이 사용하는 방법을 추천해 주었다.

> 바로 "45분 일찍 알람 설정하기"이다.
> 이 방법은 단순하다.
> 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 
> 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 
> 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다.

> 현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.

접근

입력된 시간에서 45분을 빼면 되는데 뻈을 때 음수가 되는(한 시간 전으로 돌아가는)상황이면 60분을 더해주면 된다. 예를 들어 3시 25분에서 45분 전으로 돌아가면 2시 40분이 된다. 이는 25 - 45가 -20이므로 +60해서 40분으로 구할 수 있다.
또 여기서 생각해야하는건 시다. 3시에서 한시간 돌아갔으므로 시에서도 1을 빼줘야한다. 근데 1을 뻈을 때 만약 0시 였었다면 0시 25분에서 45분 빼면 23시 40분이 되어야한다.
이를 또 시 -1이 음수라면 24를 더해주는 걸로 해결 할 수있다.

문제해결

> 시와 분을 나타내는 두 수 H와 M을 입력받는다.
> 입력받은 M에서 45를 뺴는데 그 수 가 음수라면 60을 더해주고 H에서도 1을 빼준다.
> 만약 H도 음수라면 24를 더해주면 23시 00분으로 나타낼 수 있다.
> 수정된 시간 H와 M을 출력한다.

코드

import java.io.*;
import java.util.*;
import java.lang.*;

public class Main
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int H = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        M -= 45;
        if(M < 0)
        {
            M += 60;
            H -= 1;
            if(H < 0)
            {
                H += 24;
            }
        }

        System.out.println(H + " " + M);
    }
}

후기

뭔가 시간 계산부는 C++과 다를게 없는데 이상하게 어색해서 갈피가 안잡혔다. 많이 풀어보자

0개의 댓글