https://www.acmicpc.net/problem/2525
현재시간을 적고 난 후 타이머를 설정하면 끝나는 시간을 알려줘야 한다
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int h = scan.nextInt();
int m = scan.nextInt();
int x = scan.nextInt();
m+=x;
if(m>59) {
h+=m/60;
m%=60;
if(h>23) {
h%=24;
}
}
System.out.println(h+" "+m);
}
}
우선 현재 시간인 h , m을 적고 경과시간인 x를 적어준다
여기서 확인해야 될 점은 경과시간은 분으로만 적어준다고 하였기에
m+=x;
1. 일단 현재 분인 m에 x값을 더해준다
2. m이 59가 초과하지 않으면 시간이 변하지 않으니 그냥 출력해준다
if(m>59) {
h+=m/60;
m%=60;
만약 분이 60이상의 값을 가지게되면
1. 시간에 m/60인 값을 더해준다
> m이 70이라는 가정하에 60을 나눠주면 몫은 1이니 시간에 1이 더해지는거다. 만약 130이면 몫이 2이니 2가 더해지는거다. 60분은 시간으로 환산하면 1시간이니 분에 맞게 시간을 더해주는거다
2. 다시 분인 m에는 60을 나누고 남은 나머지 값을 넣어준다
> m이 70이라는 가정하에 60을 나눠주면 나머지는 10이니 10의 값이 들어간다
그럼 여기까지 경과시간에 대한 최종시간은 정상적으로 나올것이다
하지만 현재시간이 23시라는 가정하에 60분이상의 경과시간이 걸린다고하였을때는 23시 > 0시 이므로 세부 설정이 필요하다
if(h>23) {
h%=24;
}
1. 현재시간이 23시라 가정했을 때, 60분이 경과시간이면 h는 24가 된다
> 하지만 시간의 표현은 23시가 하루의 마지막이고 23시 다음으로 0시부터 시작이므로, 시간이 23을 초과하였을 시 시간에 24를 나누어 나머지 값인 데이터를 넣어준다. 그러면 23시 0분에서 180분이 걸린다고 가정했을 때, 23+3이 될 것이고, 시간은 26시 0분이 된다. h%=24를 통해 26/24의 나머지값인 2가 시간에 설정되어 마지막 출력값은 2시 0분이 된다. 결과적으로 23시에 180분(3시간)을 더하면 2시가 나타나는 것이다.
'백준' 카테고리의 다른 글
백준 8393 합 (0) | 2025.01.01 |
---|---|
백준 10950 A+B -3 (0) | 2024.12.31 |
백준 2739 구구단 (1) | 2024.12.30 |
백준 2480 주사위 세개 (0) | 2024.12.29 |
백준 2884 알람시계 (0) | 2024.12.27 |