https://www.acmicpc.net/problem/2525
h(시)와 m(분)을 하나의 분으로 변환한 뒤 a를 더하고 나온 결과 값을 다시 시와 분으로 변환하는 방법으로 풀이
먼저 h(시)와 m(분)을 하나의 분으로 변환하는 식
min = h * 60 + m; // min = 60 * 시 + 분
하나의 분으로 변환 한 식에 요리하는데 걸리는 시간인 a를 더하는 식
int min = 60 * h + m; // 현재 (분으로 변환된)
min += a; // min = min + a; (요리완료 (분))
요리하는 데 걸리는 시간 (분)을 구한 값을 다시 시와 분으로 나누어야 된다.
int min = 60 * h + m; // 현재 (분으로 변환된)
min += a; // min = min + a; (요리완료 (분))
int hour = min / 60; // 시 ( / 는 나누기 후 몫 값 )
int minute = min & 60; // 분 ( % 는 나누기 후 나머지 값 )
근데 여기서 신경 써줘야 될것은 전자시계 이므로 24시가 되면 24시로 표시되는 것이 아니라 00시로 표시되어야 한다.
예를 들면 h와m이 각각 23, 00이고 a가 120이라면?
그러면 h * 60 + m = 1380이고, a를 더하면 1500이다.
이를 시와 분으로 다시 변환하면, 25 0이다. 즉, 25시 0분이다. 하지만 출력은 시간은 0~23 사이의 값으로 출력하라고 했으니, 원래 출력해야 할 문장은 1 0이다.
그래서 hour에도 24 이상일 경우 다시 0부터 시작할 수 있게 24로 나눈 나머지 연산이 있어야 된다
int min = h * 60 + m; // min = 60 * 시 + 분
min = min + a; // 요리하는데 걸린 시간 더하기
int hour = (min / 60) % 24; //(몫은 순환 횟수 나머지는 초과 횟수)
int minute = min % 60; // 분
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int h = Integer.parseInt(st.nextToken()); // 현재 (시)
int m = Integer.parseInt(st.nextToken()); // 현재 (분)
int a = Integer.parseInt(br.readLine()); // 요리 시간(분)
int min = 60 * h + m; // 현재 (분으로 변환된)
min += a; // min = min + a; (요리완료 (분))
int hour = (min / 60) % 24; // 24 이상이면 0으로 시작
int minute = min % 60;
System.out.println(hour + " " + minute);
}
}
최종적으론 이런 식으로 할 수 있다.
'study > algorithm' 카테고리의 다른 글
[알고리즘] 별 찍기2 - 백준 2439번 (0) | 2024.06.18 |
---|---|
[알고리즘] 별 찍기1 - 백준 2438번 (0) | 2024.06.18 |
[알고리즘] 주사위 세개 - 백준 2480번 (0) | 2024.06.17 |
[알고리즘] 알람 시계 - 백준 2884번 (0) | 2024.06.14 |
[알고리즘] 윤년 - 백준 2753번 (0) | 2024.06.14 |