코딩테스트 준비/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();
}
}
}
반응형