알고리즘/SW Expert Academy

2056. 연월일 달력

문제 정보: 2056. 연월일 달력

 

[입력]
입력은 첫 줄에 총 테스트 케이스의 개수 T가 온다.
다음 줄부터 각 테스트 케이스가 주어진다.

[출력]
테스트 케이스 t에 대한 결과는 “#t”을 찍고, 한 칸 띄고, 정답을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

입력

5
22220228
20150002
01010101
20140230
11111111
출력


#1 2222/02/28
#2 -1
#3 0101/01/01
#4 -1
#5 1111/11/11
public class solution_2056 {
    public static void main(String args[]) throws Exception{
        Scanner sc = new Scanner(System.in);
        int T;
        float V;
        T = sc.nextInt();

        String[] array = new String[T];
        for(int test_case = 1; test_case <= T; test_case++){
            array[test_case-1] = sc.next();
        }

        System.out.println();
        String year, month, day;

        for(int i=0; i<array.length; i++){
            String result = "-1";
            if(array[i].length() == 8){ //정상적인 년도
                year = array[i].substring(0,4);
                month = array[i].substring(4,6);
                day = array[i].substring(6,8);
                if(valid(year, month, day)){
                    result = year + "/" + month + "/" + day;
                }
            }

            System.out.println("#"+(i+1)+" "+result);
        }
    }

    public static boolean valid(String year, String month, String day){
        boolean isReturn = true;


        int iYear = Integer.parseInt(year);
        int iMonth = Integer.parseInt(month);
        int iDay = Integer.parseInt(day);

        if(iYear < 1){
            return false;
        }else if(iMonth < 1 || iMonth > 12){
            return false;
        }else if(iDay < 1 || iDay > 31){
            return false;
        }

        switch(iMonth){
            case 2 :
                isReturn = (iDay <= 28);
                break;
            case 4 :
            case 6 :
            case 9 :
            case 11 :
                isReturn = (iDay <= 30);
                break;
        }

        return isReturn;
    }
}