문제 : 2525번 : 오븐 시계
문제 조건
- 시작 시간과 조리 시간 주어졌을 때, 요리 끝나는 시간 구하기
- 첫째줄 : 현재 시각
- 둘째줄 : 필요 시간
- 시간의 입출력 : 정수, 시와 분 사이에 공백으로 표현할 것
- 24시간제 : 23시 넘어가면 0시로
- 두 줄을 받는데 한 줄에 공백을 처리하면서 받을 수 있어야함
풀이 과정
brain Storming
필요 시간이 60분이 넘어가면, 끝나는 시간(hour)에 60분당 +1(최대 1000분이므로 16시간까지 +가능)
시작 시간의 분과 필요시간의 분을 더하여 끝나는 시간의 시(hour)를 도출해야함
BufferedReader 두줄이상 받기 : 공백 마다 기준 하나마다 st하나씩 받고 다음 줄은 br로 또 받으면 됨
min + need
- min 59초과시, hour +1
- cookTime > 60이면, +1
14 30 + 20 = 14 50
14 30 + 30 = 15 00 -> hour에 +1 되어야함
요리 시간 60이 넘어가면 +1해야함
60분 이상이면 hour에 +1 해줘야하는데, 2,3시간 넘어갈 경우 각각의 경우의 수를 고려해야함
1000분 제한이라 switch로 일일히 각 시간을 나눠서 할 수 있지만 너무 비효율적임. 다른 방법이 뭐가 있을까?
분 단위 계산으로 min에 cookTime을 더하고, 총 min을 60으로 나눠서 hour 더하면 될 듯...?
해설
전체를 분으로 바뀌서 후에 60을 나누거나 나머지로 시, 분을 각각 구하는 방식
시를 분으로 변환(변수 min)
여기에 요리시간(분)을 더함
이 상태에서 60으로 나눈 나머지가 시(hour)가 되는데, 23시를 넘어가는 경우를 생각해서 24로 나누고 난 나머지를 hour로 사용
또한 분(변수 minute)도 60으로 나눈 나머지는 60이하만 나오기 때문에 자연스레 분으로 만들어진다
입력값 17 40과 80을 예로 계산해보면 아래의 주석과 같다
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(br.readLine());
int min = 60 * A + B; // 시 -> 분 // 60 * 17 + 40 = 1060 min
min += C; // 전체 분 + 요리시간 분의 합 // 1060 + 80 = 1140min
int hour = (min / 60) % 24; // 23시를 넘은 0시를 위한 처리 // (1140 / 60) % 24 = 19
int minute = min % 60; // 60분 넘어가면 나머지만 구하면 분이 나옴 // (1140 % 60) = 0
System.out.println(hour + " " + minute);
정답
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 A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(br.readLine());
int min = 60 * A + B; // 시 -> 분
min += C;
int hour = (min / 60) % 24;
int minute = min % 60;
System.out.println(hour + " " + minute);
}
}
'코딩테스트' 카테고리의 다른 글
[코딩테스트] Java의 콘솔에서 여러 줄 입력 읽기 (0) | 2022.11.12 |
---|---|
[코딩테스트] 입력, 출력값도 같은 값이고 로직도 맞는 것 같은데 틀리다고 나온다면...? (0) | 2022.11.11 |
[코딩테스트][백준] Step2-5 2884번 : 알람 시계 (0) | 2022.11.11 |
[코딩테스트][백준] Step2-4 14681번 : 사분면 고르기 (0) | 2022.10.10 |
[코딩테스트][백준] Step2-3 2753번 : 윤년 (1) | 2022.09.30 |