카드 유효기간은 MMYY 또는 YYMM인데, 주어진 표기가 MMYY인지 YYMM인지 판별하는 문제.
*둘다되면 AMBIGUOUS, 둘다 안되면 NA 출력
#include <stdio.h>
int main(void){
int tc, T;
int N, i, m, y;
scanf("%d", &T);
for(tc=1; tc<=T; tc++){
scanf("%d", &N);
printf("#%d ", tc);
if(N/100>12){
if(N%100>12||N%100==0) printf("NA\n");
else printf("YYMM\n");
}else if(N%100>12){
if(N/100>12||N/100==0) printf("NA\n");
else printf("MMYY\n");
}else if(N%100==0||N/100==0){
if(N==0) printf("NA\n");
else if(N%100==0) printf("MMYY\n");
else printf("YYMM\n");
}else printf("AMBIGUOUS\n");
}
return 0;
}
AMBIGUOUS가 나오는 경우 : 월과 년도가 12이하이고 월이 1이상일때이다.
앞뒤가 전부 12를 넘을 때, 전부 0일때, 전부 1이상 12이하일 때, 둘 중 하나가 0이고 나머지가 13이상일 때,
나머지가 1이상 12 이하일 때, 둘 중 하나가 1이상 12이하이고 나머지가 13이상일 때
위의 경우로 나누어 각 케이스에 맞게 출력해준다.
if문의 범위를 잡는 것이 힘들었다.
처음엔 0000의 경우를 생각 못했고, 그 다음엔 MMYY 중 하나가 00이고 다른 하나가 12 이내일 때를 생각하지 못했다. if문이 중첩되다보니 각 케이스들이 겹쳐버려 문제가 생겼었다. 첫번째 if문에서 걸려 밑으로 내려오지 못하는 등 헷갈리지 않고 모든 케이스를 맞추도록 짜야 했다. 아니면 중첩 if문을 사용하지 않고 그냥 else if문으로만 케이스를 쭉쭉 내려서 쓰는 게 편했을지도 모른다. 조금이라도 덜 나누고 싶었는데 결국 코드가 길어졌다. 효율적으로 케이스를 나누기 위해 머리를 많이 써야할 것 같다.
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
'SWEA > [D3]' 카테고리의 다른 글
[D3] SWEA 10505 소득불균형 (0) | 2020.11.06 |
---|---|
[D3] SWEA 10726 이진수표현 (0) | 2020.11.02 |
[C언어] SWEA 10505 - 소득 불균형 (0) | 2020.09.20 |
[D3] SWEA10032 과자 분배 (0) | 2020.09.20 |
[D3] SWEA9997 미니멀리즘 시계 (0) | 2020.09.11 |