package SWExpertAcademy.D1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class PROB2056 {
/*
입력은 첫 줄에 총 테스트 케이스의 개수 T
출력은 #t 년/월/일
해당 날짜가 없으면 -1
*/
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
String date = br.readLine();
String year = date.substring(0, 4);
String month = date.substring(4, 6);
String day = date.substring(6);
// month 유효성 판단
if (Integer.parseInt(month) < 1 || Integer.parseInt(month) > 12) {
sb.append("#").append(i+1).append(" ").append(-1).append("\n");
} else {
// day 유효성 판단
if (month.equals("01") || month.equals("03") || month.equals("05") || month.equals("07") || month.equals("08") || month.equals("10") || month.equals("12")) {
if (Integer.parseInt(day) < 1 || Integer.parseInt(day) > 31) {
sb.append("#").append(i+1).append(" ").append(-1).append("\n");
} else {
sb.append("#").append(i+1).append(" ").append(year).append("/").append(month).append("/").append(day).append("\n");
}
} else if (month.equals("02")) {
if (Integer.parseInt(day) < 1 || Integer.parseInt(day) > 28) {
sb.append("#").append(i+1).append(" ").append(-1).append("\n");
} else {
sb.append("#").append(i+1).append(" ").append(year).append("/").append(month).append("/").append(day).append("\n");
}
} else {
if (Integer.parseInt(day) < 1 || Integer.parseInt(day) > 30) {
sb.append("#").append(i+1).append(" ").append(-1).append("\n");
} else {
sb.append("#").append(i+1).append(" ").append(year).append("/").append(month).append("/").append(day).append("\n");
}
}
}
}
System.out.println(sb);
}
}
문제
연월일 순으로 구성된 8자리의 날짜가 입력으로 주어진다.
해당 날짜의 유효성을 판단한 후, 날짜가 유효하다면
[그림1] 과 같이 ”YYYY/MM/DD”형식으로 출력하고,
날짜가 유효하지 않을 경우, -1 을 출력하는 프로그램을 작성하라.
연월일로 구성된 입력에서 월은 1~12 사이 값을 가져야 하며
일은 [표1] 과 같이, 1일 ~ 각각의 달에 해당하는 날짜까지의 값을 가질 수 있다.
※ 2월의 경우, 28일인 경우만 고려한다. (윤년은 고려하지 않는다.)
[입력]
입력은 첫 줄에 총 테스트 케이스의 개수 T가 온다.
다음 줄부터 각 테스트 케이스가 주어진다.
[출력]
테스트 케이스 t에 대한 결과는 “#t”을 찍고, 한 칸 띄고, 정답을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
풀이
package SWExpertAcademy.D1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class PROB2056 {
/*
입력은 첫 줄에 총 테스트 케이스의 개수 T
출력은 #t 년/월/일
해당 날짜가 없으면 -1
*/
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
String date = br.readLine();
String year = date.substring(0, 4);
String month = date.substring(4, 6);
String day = date.substring(6);
// month 유효성 판단
if (Integer.parseInt(month) < 1 || Integer.parseInt(month) > 12) {
sb.append("#").append(i+1).append(" ").append(-1).append("\n");
} else {
// day 유효성 판단
if (month.equals("01") || month.equals("03") || month.equals("05") || month.equals("07") || month.equals("08") || month.equals("10") || month.equals("12")) {
if (Integer.parseInt(day) < 1 || Integer.parseInt(day) > 31) {
sb.append("#").append(i+1).append(" ").append(-1).append("\n");
} else {
sb.append("#").append(i+1).append(" ").append(year).append("/").append(month).append("/").append(day).append("\n");
}
} else if (month.equals("02")) {
if (Integer.parseInt(day) < 1 || Integer.parseInt(day) > 28) {
sb.append("#").append(i+1).append(" ").append(-1).append("\n");
} else {
sb.append("#").append(i+1).append(" ").append(year).append("/").append(month).append("/").append(day).append("\n");
}
} else {
if (Integer.parseInt(day) < 1 || Integer.parseInt(day) > 30) {
sb.append("#").append(i+1).append(" ").append(-1).append("\n");
} else {
sb.append("#").append(i+1).append(" ").append(year).append("/").append(month).append("/").append(day).append("\n");
}
}
}
}
System.out.println(sb);
}
}
Java
복사
피드백
package SWExpertAcademy.D1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class PROB2056 {
/*
입력은 첫 줄에 총 테스트 케이스의 개수 T
출력은 #t 년/월/일
해당 날짜가 없으면 -1
*/
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
// 각 월별 말일 저장 0월은 없으므로 0으로 지정
int[] endDays = new int[] {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
for (int test_case = 1; test_case <= T; test_case++) {
String date = br.readLine();
String year = date.substring(0, 4);
String month = date.substring(4, 6);
String day = date.substring(6);
sb.append("#").append(test_case).append(" ");
// month, day 유효성 판단
int monthInt = Integer.parseInt(month);
int dayInt = Integer.parseInt(day);
if (monthInt < 1 || monthInt > 12 || endDays[monthInt] < dayInt || dayInt < 1) {
sb.append(-1).append("\n");
continue;
}
sb.append(year)
.append("/")
.append(month)
.append("/")
.append(day)
.append("\n");
}
System.out.println(sb);
}
}
Java
복사