study/algorithm

[알고리즘] 오븐 시계 - 백준 2525번

박허디 2024. 6. 14. 16:18

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);
    }
}

 

최종적으론 이런 식으로 할 수 있다.