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)로 하면 오류가 나기 때문에 꼭 저렇게 해야 한다.
'백준 알고리즘' 카테고리의 다른 글
[백준 11659번] - 구간 합 구하기4 자바 [With Java] (0) | 2023.08.04 |
---|---|
[백준 10809] 알파벳 찾기 - 자바 [ With Java] (0) | 2023.08.04 |
[백준 알고리즘] 1546 - 평균 구하기 자바 - [With Java] (0) | 2023.08.03 |
[백준 알고리즘 5597] - 과제 안내신분? 자바 (With Java) (0) | 2023.08.03 |
[백준 알고리즘 ] 문제 번호 : 10807 [With Java 자바] (0) | 2023.08.01 |