Java/Java 알고리즘

백준 25024번 시간과 날짜 JAVA 구현해보기

kimc 2022. 5. 9. 23:24

```

백준 25024번 시간과 날짜 JAVA 구현해보기

```

이번 글을 통해 배워갈 내용

  1. 백준 25024번 풀이

https://www.acmicpc.net/problem/25024

 

25024번: 시간과 날짜

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

www.acmicpc.net

 

 

 

백준 25024번 시간과 날짜는

난이도 브론즈 등급의 문제로서

 

테스트 케이스만큼 숫자 A와 B가 주어지면

해당되는 A와 B 가

A시 B분 그리고 A월 B일로 표기가 가능한지 확인해서

Yes No로 각각의 경우마다 표기해주면 되는 문제입니다.

 


30분 정도 위에 링크를 방문하셔서 풀어보시고

안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.


Reactive 하게 프로그래밍을 해봤습니다.

해당되는 조건에 맞게 isValidDate 와 isValidTime이라는 메서드를 만들어서

비교 후에 출력하였습니다.

 

코드 길이를 줄이기 위해서 isValidDate안에 스위치 문 대신에

배열로 {0,31,29,31,30...} 으로 표시해서 비교 문을 써서 10줄이 넘는 코드를 두줄로 줄이는 것도 좋은 방향이라 생각합니다. 

 

public class Main {
    // BufferedReader Object 생성
    static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    public static void main(String[] args) throws IOException {

        // 입력
        final int testCaseSize = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();

        IntStream.range(0, testCaseSize).forEach((i) -> {
            try {
                sb.append(isValidDateAndTime());
            } catch (IOException e) {
                e.printStackTrace();
            }
        });

        // 출력
        sb.setLength(sb.length() - 1);
        System.out.print(sb);
    }

    private static String isValidDateAndTime() throws IOException {
        StringTokenizer st = new StringTokenizer(br.readLine());
        final int num1 = Integer.parseInt(st.nextToken());
        final int num2 = Integer.parseInt(st.nextToken());

        StringBuilder sb = new StringBuilder();

        if (isValidTime(num1, num2)) {
            sb.append("Yes ");
        } else {
            sb.append("No ");
        }

        if (isValidDate(num1, num2)) {
            sb.append("Yes\n");
        } else {
            sb.append("No\n");
        }
        return sb.toString();
    }

    private static boolean isValidTime(int num1, int num2) {
        return (num1 < 24 && num1 >= 0) && (num2 < 60 && num2 >= 0);
    }

    private static boolean isValidDate(int num1, int num2) {
        boolean isValidDate = false;
        switch (num1) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                if (num2 > 0 && num2 <= 31) {
                    isValidDate = true;
                }
                break;
            case 2:
                if (num2 > 0 && num2 <= 29) {
                    isValidDate = true;
                }
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                if (num2 > 0 && num2 <= 30) {
                    isValidDate = true;
                }
                break;
            default:
                break;
        }
        return isValidDate;
    }


}
//codemasterkimc.tistory.com [김씨의 코딩 스토리]

 

 

읽어주셔서 감사합니다

 

무엇인가 얻어가셨기를 바라며

 

오늘도 즐거운 코딩 하시길 바랍니다 ~ :)

 


 

728x90