티스토리 뷰

백준/java

[백준 2525 / JAVA] 오븐 시계

3284921 2024. 11. 5. 00:09

[단계별로 풀어보기] 백준 2525 / 오븐 시계

 

무난히 풀린다고 생각했는데 너무 단순무식하게 접근해서 틀린 문제였다...

 

초기 코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a, b, c;
        a = scanner.nextInt();
        b = scanner.nextInt();
        c = scanner.nextInt();

        int sum = b + c;
        int newMin, newHour;
        if (sum >= 60){
            newMin = sum - 60;
            newHour = a + 1;

            if (newHour == 24){
                newHour = newHour - 24;
            }
        }
        else {
            newMin = sum;
            newHour = a;
        }

        System.out.printf("%d %d", newHour, newMin);




    }
}

 

처음에 요리하는 데 필요한 시간 C (0 ≤ C ≤ 1,000)을 못 보고 당연히 60분을 넘지 않을 거라 생각하는 멍청한 실수를 하고 이런 코드를 짰다... 

요리 시간이 60분 이하일 때는 작동했지만 999분으로 넣었을 때는 당연히 오류 발생

 

수정 코드

1. Scanner로 입력 받기(자바는 띄어쓰기든 엔터든 구분 없이 그냥 3개 값 모두 nextInt로 받으면 됨)

이때 a, b, c는 각각 현재 시각의 시, 분, 조리시간

2. sum은 b+c로 현재 시각의 분+조리시간

3. newMin과 newHour은 출력될 최종 조리 종료 시각과 분

 

이때 newMin과 newHour를 계산하기 위해 /(몫 구하기, 나머지는 버림)과 %(나머지 구하기, 모듈러 연산)를 사용한다.

예를 들어 1시 10분에 100분의 조리 시간을 입력한다. 

sum은 110, 110을 60분으로 나누면 몫 1, 나머지 50이 되는데 50은 newMin, 몫 1에 현재시간 a를 더한 2가 newHour이 된다.

고로 결과는 1 110이 아닌 2 50으로 출력되는 것이다. 

 

이때 조리 종료 시각이 24시를 넘어 다음날이 되면 24시, 25시가 아닌 0시, 1시로 표기된다. 따라서 이중 조건문으로 24시를 넘어갔을 때 -24를 해 주어야 한다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a, b, c;
        a = scanner.nextInt();
        b = scanner.nextInt();
        c = scanner.nextInt();

        int sum = b + c;
        int newMin, newHour;
        if (sum >= 60){ // 현재 시각의 분 + 요리 필요 시간이 60분을 넘어갈 때
            newMin = sum % 60;
            newHour = a + (sum / 60);

            if (newHour >= 24){ // 24시를 넘어갈 때
                newHour = newHour - 24;
            }
        }

        else { // 시각의 변동이 없을 때 (예. 현재 시각 1시 0분 + 조리시간 10분)
            newMin = sum;
            newHour = a;
        }

        System.out.printf("%d %d", newHour, newMin);

    }
}

'백준 > java' 카테고리의 다른 글

[백준 10807 / JAVA] 개수 세기  (0) 2024.11.07
[백준 10951 / JAVA] A+B -4 <JAVA EOF>  (0) 2024.11.05
[백준 2739 / JAVA] 구구단  (0) 2024.11.05
[백준 9498 / JAVA] 시험 성적  (0) 2024.11.01
[백준 1330/JAVA] 두 수 비교하기  (0) 2024.11.01
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함