java [백준]2884번 알람 시계
본문 바로가기
알고리즘 풀이/백준

java [백준]2884번 알람 시계

by IYK2h 2022. 8. 19.
728x90
//오류 코드 : M>45
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
​
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String str = bf.readLine();
        StringTokenizer st = new StringTokenizer(str," ");
​
​
        int H = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
​
        int alarm = 45;
​
        if (M>45) {
            M = M-alarm;
        }
        else {
            H--;
            M = 60 - (alarm - M);
            if (H < 0){
                H = 23;
            }
        }
        System.out.println(H + " " + M);
    }
}
​

위와 같이 코드를 작성하였는데 오류가 나왔다. 이유는 M>45 으로 조건을 걸어두었는데 45를 넣으면 else 문으로 넘어가서 오류가 나게 되었다. 45일때 0분으로 나와야 하기 때문에 M>=45로 하거나 M<45 로 해야한다.

테스트 검사중에서도 경계값 검사가 있는데 M>45라고 가정하면 46,45,44 3가지의 테스트 를 하는 것이다.

경계값에서 실수를 많이 하기 때문에 이 부분을 항상 생각하며 코드를 작성하자.

//정상 코드 : M<45 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
​
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(bf.readLine()," ");
​
​
        int H = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
​
        int alarm = 45;
​
        if (M < 45) {
            H--;
            M = 60 - (alarm - M);
            if (H < 0){
                H = 23;
            }
        }
        else {
            M = M-alarm;
        }
        System.out.println(H + " " + M);
    }
}
728x90

댓글