SWEA/[D3]

[D3] SWEA10059 유효기간

ruming 2020. 9. 26. 01:29

카드 유효기간은 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문으로만 케이스를 쭉쭉 내려서 쓰는 게 편했을지도 모른다. 조금이라도 덜 나누고 싶었는데 결국 코드가 길어졌다. 효율적으로 케이스를 나누기 위해 머리를 많이 써야할 것 같다.

 


swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXK6YRNaKq0DFAU3&categoryId=AXK6YRNaKq0DFAU3&categoryType=CODE

 

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