2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

[백준 2525번 ] 오븐 시계 -[JAVA 자바 ]

2023. 7. 31. 23:45ㆍ백준 알고리즘

2525번: 오븐 시계 (acmicpc.net)

 

2525번: 오븐 시계

첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)

www.acmicpc.net

 

 

 

 

 

 

[알고리즘 접근 방법]

 

이 문제의 경우 14 : 30을 현재 시간으로 받는다면 20분을 추가해서 14: 50분이 되고

 

17 : 40분의 현재시간을 받는다면 80분 후의 시간 19 : 0시가 되게 하면 된다.

 

이런 문제의 경우는 단위를 통합해서 문제를 풀면 된다.

 

그러니까 [ (14시 * 60)  + M(30분) + (20분)   ] 하면 모든 시간을 분으로 "통합 할 수 있다"

 

그렇게 된다면  

 

총 890분이 나오게 되는데 여기서 가장 중요하다.

 

890분을 60분으로 나눈다면 현재 시간이 나오게 되고

 

890분을 60분을 나머지 연산을 사용 한다면 현재 분이 나오게 된다.

 

890 / 60  = 14.888이 나오지만 자바는 정수 / 정수 일 경우 소수점을 제외 하고 나오기 때문에

14가 된다. 즉  hour= 14;

 

890%60 = 나머지는 50이 됨으로

 

14 : 50이 나오게된다. 즉 분은 min = 50

 

예제 2번도 이 방법과 마찬가지 이고

 

예제 3번을 유심히 봐야하는데 

 

24시가 될때는 0으로 바꿔줘야 한다고 한다.

 

그렇다면 위 연산과 똑같이

 

(23*60)+48+25 = 1453이 나오게된다.

여기서 

 

1453/60 = 24.12222가 나오게 되지만 정수 / 정수일때는 소수점을 제외 해서 나오기 때문에 24가 되고

 

1453%60 = 13이 된다.

 

하지만 24는 0으로 출력하라 했음으로 

 

hour = hour - 24를 한다면 0이 출력될 것 이다.

 

코드로 보자.

 

 

import java.util.*;

public class Main {
    
    public static void main(String[] args){
       Scanner sc = new Scanner(System.in);
        int Hour = sc.nextInt();
        int Min = sc.nextInt();
        int time = sc.nextInt();
        
        int T = (Hour*60)+Min+time;
        
        Hour = T/60;
        Min =  T%60;
        
        if(Hour >= 24){
            Hour = Hour - 24;
        }
        System.out.printf("%d %d",Hour,Min);
        
    }
}

 

위에서 설명한 것 처럼 정말 간단하다.

여기서 주의할 점은 

 

if(Hour >= 24)로 설정해야 한다.

그 이유는 백준에서 값을 입력 받을때 Hour 값이 25가 넘어올 수도 있고 26이 넘어올 수 도 있기때문에

 

if(Hour == 24)로 하면 오류가 나기 때문에 꼭 저렇게 해야 한다.