본문 바로가기

백준/JAVA

[Baekjoon/JAVA] 25024번 - 시간과 날짜

[백준] Baekjoon Online Judge

문제로 이동

 

문제

어느 날 시계를 본 경근이는 시간이 8시 14분인 것을 보고 놀랐다. 왜냐하면 그의 생일은 8월 14일이기 때문이다. 그리고 이 경험을 바탕으로 다음과 같은 문제를 만들었다:

두 정수 x, y가 주어질 때, x y분으로 읽는 것이 가능한지의 여부를 판단하면서, x y일로 읽는 것이 가능한지의 여부를 판단하는 프로그램을 작성하라.

시는 0시에서 23시까지, 분은 0분에서 59분까지가 유효하며, 월은 1월에서 12월까지가 유효하다. 1월, 3월, 5월, 7월, 8월, 10월, 12월은 1일에서 31일까지가 유효하고, 4월, 6월, 9월, 11월은 1일에서 30일까지가 유효하며, 2월은 1일에서 29일까지가 유효하다.

 

입력

첫 번째 줄에 테스트 케이스의 개수 T (1 ≤ T )가 주어진다.

각 테스트 케이스는 한 줄로 구성되어, 두 정수 x, y(0 ≤ x, y ≤ 99)가 공백 하나로 구분되어 주어진다.

 

출력

각 테스트케이스 마다 두 문자열을 공백 하나로 구분하여 출력한다. 첫 번째 문자열은 두 정수 x, y x y분으로 읽는 것이 가능하면 “Yes”, 가능하지 않으면 “No”여야 한다. 두 번째 문자열은 두 정수 x, y x y일로 읽는 것이 가능하면 “Yes”, 가능하지 않으면 “No”여야 하다.

따옴표는 제외하고 출력되어야 하며, 정답과 맞지 않더라도 두 문자열이 모두 출력되어야 제대로 된 채점이 가능하다.

 


예제 입력 예제 출력
3
8 14
23 59
98 76
Yes Yes
Yes No
No No

풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int T = Integer.parseInt(br.readLine()); // 테스트 케이스의 개수

        for (int i = 0; i < T; i++) {
            String[] s = br.readLine().split(" ");
            int x = Integer.parseInt(s[0]);
            int y = Integer.parseInt(s[1]);

            canTime(x, y);
            canMonth(x, y);
        }
    }

    //두 정수 x, y를 x시 y분으로 읽을 수 있는가?
    public static void canTime(int x, int y) {
        if (x <= 23 && y <= 59)
            System.out.print("Yes ");
        else
            System.out.print("No ");
    }

    //두 정수 x, y를 x월 y일로 읽을 수 있는가?
    public static void canMonth(int x, int y) {
        int day[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        if ((x <= 12 && x > 0) && (y <= day[x - 1] && y > 0))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}

 

    //두 정수 x, y를 x시 y분으로 읽을 수 있는가?
    public static void canTime(int x, int y) {
        if (x <= 23 && y <= 59)
            System.out.print("Yes ");
        else
            System.out.print("No ");
    }

x시 y분으로 읽기 위해서는 x는 23보다 작거나 같아야하고, y는 59보다 작거나 같아야 한다. 이에 따라 Yes와 No가 출력되게끔 했다. 여기서 출력할 때 x월 y일에 대한 출력도 나란히 있어야 하므로 print로 Yes와 No 뒤에 공백을 하나 추가해서 출력했다.

 

    //두 정수 x, y를 x월 y일로 읽을 수 있는가?
    public static void canMonth(int x, int y) {
        int day[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        if ((x <= 12 && x > 0) && (y <= day[x - 1] && y > 0))
            System.out.println("Yes");
        else
            System.out.println("No");
    }

x월 y일로 읽기 위해서는 x가 0보다 크고 12와 작거나 같아야 한다. 그리고 y가 x월이 가지고 있는 일보다 작거나 같고, 0보다 커야 한다. 이를 위해 미리 day[]에 각 월이 가지고 있는 일수를 저장한 뒤 x - 1로 이 값을 꺼내서 사용했다.