💡문제 접근 방법
A(시)와 B(분)을 하나의 분으로 변환한 뒤, C(분)을 더한 값을 다시 시(Hour)과 분(Minute)로 변환하는 전략을 선택한다.
먼저 입력 받은 A(Hour)와 B(Minute)을 하나의 변환한다.
int min = 60 * A + B; // 주어진 시간을 '분'으로 변환
그 다음으로 요리하는 데에 걸리는 시간인 C(Minute)를 더한다.
min = min + C; // 요리하는데 걸린 시간을 더한다
주어진 시간과 요리하는 데에 걸리는 시간을 분(Minute)으로 변환하는 작업은 끝이 났다. 다음으로는 시(Hour)와 분(Minute)으로 변환하는 작업을 해야한다. 시(Hour)를 구하기 위해선 분(Minute)을 60으로 나눈다.
예를 들어 Minute이 120이라면 시(Hour)으로 변환하면 2이 되어야한다. 120을 2로 '나누면' 시간을 구할 수 있다. 그렇다면 분(Minute)은 어떻게 구할까? 분(Minute)을 구하기 위해 분을 60으로 나눈 나머지 값을 구한다. 125분을 시간으로 나타내면 2시간 5분이다. 여기서 분(Minute)은 5인데, 이는 125를 60으로 나눈 나머지와 같은 값이 된다.
마지막으로 문제에선 시(Hour)를 0~23으로 제시했다. 이 조건을 지키기 위해 24를 나눈 나머지 연산을 해야한다. 예를들어 A와 B가 23 00 이고 C가 120이라 가정할 때 이를 분으로 바꾸면 A*60 + B = 1380이고 C를 더하면 1500이다. 이를 다시 시(Hour)과 분(Minute)으로 변환하면 25 0 이다. 즉, 25시 0분이 된다. 하지만 문제에서는 0~23사이의 값을 시(Hour)로 나타내라 했으므로 1 0이 나와야 한다. 25를 24로 나누면 나머지로 그 값을 구할 수 있다.
// 분으로 변환했던 시간을 다시 시(hour)과 분(minute)로 변환한다.
int hour = (min / 60) % 24; // 시(24시 이상이 될 경우 0시부터 시작한다)
int minute = min % 60;
💡정답
import java.util.Scanner;
public class Qno2525 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int A = in.nextInt(); // 시간
int B = in.nextInt(); // 분
int C = in.nextInt(); // 요리하는데 걸린 시간
int min = 60 * A + B; // 주어진 시간을 '분'으로 변환
min = min + C; // 요리하는데 걸린 시간을 더한다
// 분으로 변환했던 시간을 다시 시(hour)과 분(minute)로 변환한다.
int hour = (min / 60) % 24; // 시(24시 이상이 될 경우 0시부터 시작한다)
int minute = min % 60;
System.out.println(hour + " " + minute);
}
}
참조
'java > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘 / 1차원배열] 5597번 : 과제 안 내신분...? - JAVA (0) | 2023.03.24 |
---|---|
[백준알고리즘/배열] 10807번 : 개수 세기 - JAVA (0) | 2023.03.21 |
[백준 알고리즘/조건문] 2884번. 알람시계 (0) | 2023.03.15 |
[백준 알고리즘/조건문] 2439번 별 찍기 -2 (0) | 2023.03.08 |
[백준 알고리즘/조건문] 25304번 영수증 (0) | 2023.03.07 |