개발에 AtoZ까지

[JAVA][D1] 2056. 연월일 달력 본문

코딩테스트 준비/SWEA

[JAVA][D1] 2056. 연월일 달력

AtoZ 개발자 2021. 1. 3. 17:23
반응형

문제 

연월일 순으로 구성된 8자리의 날짜가 입력으로 주어진다.
 



해당 날짜의 유효성을 판단한 후, 날짜가 유효하다면

[그림1] 과 같이 ”YYYY/MM/DD”형식으로 출력하고,

날짜가 유효하지 않을 경우, -1 을 출력하는 프로그램을 작성하라.


연월일로 구성된 입력에서 월은 1~12 사이 값을 가져야 하며

일은 [표1] 과 같이, 1일 ~ 각각의 달에 해당하는 날짜까지의 값을 가질 수 있다.
 


※ 2월의 경우, 28일인 경우만 고려한다. (윤년은 고려하지 않는다.)


[입력]

입력은 첫 줄에 총 테스트 케이스의 개수 T가 온다.

다음 줄부터 각 테스트 케이스가 주어진다.


[출력]

테스트 케이스 t에 대한 결과는 “#t”을 찍고, 한 칸 띄고, 정답을 출력한다.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

예시

 

풀이

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

public class Solution {
	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		//각 달의 마지막 날짜
		int[] MonthDay = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
		try {
			int N =Integer.parseInt(br.readLine());
			for(int i=1;i<=N;i++) {
				String days = br.readLine();
				//subString을 사용하여 년월일을 숫자로 변환
				int year = Integer.parseInt(days.substring(0, 4));
				int month = Integer.parseInt(days.substring(4, 6));
				int day = Integer.parseInt(days.substring(6, 8));
				boolean flag = true;
				if(year<=0) {
					flag=false;
				}
				//월이 1월보다 작거나, 12월보다 큰경우를 위한 If문
				if (flag&&month < 1 || month > 12)
					flag = false;
				//만약 month가 잘못됐다면 day를 검사할 필요가 없다.
				//만약 month가 정상인데도 day가 해당 month에 맞지않는 경우를 위한 If문
				if(flag&&day>MonthDay[month-1]||day<1)
					flag = false;
				//출력문
				if(flag) {
					System.out.printf("#%d %04d/%02d/%02d\n",i,year,month,day);
				}
				else {
					System.out.println("#"+i+" -1");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
반응형
Comments