728x90

 

문제 : 2525번 : 오븐 시계

2525번: 오븐 시계 (acmicpc.net)

 

2525번: 오븐 시계

첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)

www.acmicpc.net

 

 

문제 조건

  • 시작 시간과 조리 시간 주어졌을 때, 요리 끝나는 시간 구하기
  • 첫째줄 : 현재 시각
  • 둘째줄 : 필요 시간
  • 시간의 입출력 : 정수, 시와 분 사이에 공백으로 표현할 것
  • 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);
 
    }
}

 

 

728x90
반응형

+ Recent posts