8자리 숫자가 날짜로 유효하면 YYYY/MM/DD형식으로 출력
유효하지 않으면 -1을 출력
2월은 28인 경우만 고려한다.
switch case문을 이용해 월 별로 케이스를 나눴다.
#include <stdio.h>
int main(void) {
int test_case, T;
scanf("%d", &T);
for (test_case = 1; test_case <= T; test_case++) {
int date;
scanf("%d", &date);
int y, m, d;
y = date / 10000;
m = date % 10000 / 100;
d = date % 100;
printf("#%d ", test_case);
switch (m) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if (d >= 1 && d <= 31) {
printf("%04d/%02d/%02d", y, m, d);
}
else {
printf("-1");
}
break;
case 2:
if (d >= 1 && d <= 28) {
printf("%04d/%02d/%02d", y, m, d);
}
else {
printf("-1");
}
break;
case 4:
case 6:
case 9:
case 11:
if (d >= 1 && d <= 30) {
printf("%04d/%02d/%02d", y, m, d);
}
else {
printf("-1");
}
break;
default:
printf("-1");
}
printf("\n");
}
return 0;
}
전에 풀었던 코드가 더 효율적이다. 퇴화했나..
범위에 따라 달에 해당하는 날짜의 값인지 아닌지 조건문으로 검사한다. default로 자연스럽게 월 범위도 검사하게 된다.
출력할 때는 형식에 유의한다.
배열에 각 월에 해당하는 일수를 저장하고 년, 월, 일 순서대로 범위에 맞는지 체크한다. 앞에서는 년까지는 체크를 안했는데 통과했었다.
#include <stdio.h>
int main(void) {
int test_case, T;
scanf("%d", &T);
for (test_case = 1; test_case <= T; test_case++) {
int date, y, m, d;
int day[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
scanf("%d", &date);
y = date / 10000;
m = (date / 100) % 100;
d = date % 100;
if (y >= 0) {
if (m >= 1 && m <= 12) {
if (d <= day[m - 1] && d >= 1) {
printf("#%d %04d/%02d/%02d\n", test_case, y, m, d);
continue;
}
}
}
printf("#%d -1\n", test_case);
}
return 0;
}
'SWEA > [D1]' 카테고리의 다른 글
[C언어] SWEA 2047 신문 헤드라인 (0) | 2022.03.02 |
---|---|
[C언어] SWEA 2050 알파벳을 숫자로 변환 (0) | 2022.03.02 |
[C언어] SWEA 2063 중간값 찾기 (0) | 2022.03.02 |
[D1] SWEA2058 - 자릿수 더하기 (0) | 2021.04.07 |
[D1] SWEA2043 서랍의 비밀번호 (0) | 2021.04.07 |