이번 문제는 이전 문제의 약간은 심화된 문제이다.
이런 문제를 처음 보는 초보자들에겐 약간은 어렵게 다가올 수도 있다고 생각이 된다.
하지만, 논리를 잘 정리한다면 문제를 보다 쉽게 풀 수 있다.
먼저 내가 작성한 코드를 올리겠다.
import java.util.*;
public class Ex2_6 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int hour = sc.nextInt(); // 시
int minute = sc.nextInt(); // 분
int addMinute = sc.nextInt(); // 추가 분
if(minute + addMinute < 59) // 추가 시간을 더해도 시의 변경이 없을 떄
minute += addMinute;
else if(minute + addMinute > 59) { // 시의 변경이 있을 떄
hour = (hour +(minute + addMinute) / 60) % 24; // 시의 계산
minute = (minute + addMinute) % 60; // 분의 계산
}
System.out.printf("%d %d%n", hour,minute);
}
}
우선 분과 추가 분의 합이 59를 초과하지 않을 땐, 그냥 둘을 더하면 끝이다.
하지만 분과 추가 분의 합이 59를 초과하여 시의 변경이 생길 경우엔 다르다.
현재 시에 관계없이, 항상 시가 23을 초과하여 다음 날이 되는 경우에도 시의 값을 올바르게 설정하기 위해선
항상 24로 나눈 나머지를 현재 시로 설정하게 해야한다고 생각했다.
분도 똑같이 항상 올바르게 값을 설정하려면, 60을 나눈 나머지로 따로 분을 설정하게 하였다.
여기서 주의해야 할 점은 minute을 hour보다 먼저 작성한다면,
hour를 계산할 때 minute에 올바르지 않을 값이 전해질게 분명하다.
그리고 이전 시계 문제에서는 -= += 과 같이 줄였지만 이 경우에선 그렇게 해선 안된다.
위 식을 펼쳐보면 minute = minute + addMinute % 60;
본래라면 minute과 addMinute을 먼저 더한 값에 60으로 나눈 나머지를 구해야 하는데
20 % 60 이 먼저 수행되고 40을 더하기에 값을 올바르게 구할 수 없다.
'알고리즘 분류 > Step2 조건문' 카테고리의 다른 글
</Step2_7> 2480 주사위 세개 JAVA (0) | 2023.03.11 |
---|---|
</Step2_5> 2884 알람 시계 JAVA (0) | 2023.03.11 |
</Step2_4> 14681 사분면 고르기 JAVA (0) | 2023.03.11 |
</Step2_3> 2753 윤년 JAVA (0) | 2023.03.11 |
</Step2_2> 9498 시험 성적 JAVA (0) | 2023.03.11 |