1924번: 2007년

첫째 줄에 빈 칸을 사이에 두고 x(1≤x≤12)와 y(1≤y≤31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.

www.acmicpc.net

 

 

내 풀이는 다음과 같다. 

#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>

int main()
{
	int month, day, totalDay = 0;
	
	scanf("%d %d", &month, &day);

	for (int i = 1; i < month+1; i++) {
		if (i == 3) {
			totalDay += 28;
		}

		else if (i == 5 or i == 7 or i == 10 or i == 12) {
			totalDay += 30;
		}

		else if (i == 2 or i == 4 or i == 6 or i == 8 or i == 9 or i == 11) {
			totalDay += 31;
		}
	}
	totalDay += day;

	switch (totalDay % 7)
	{
	case 0:
		printf("SUN");
		break;
	case 1:
		printf("MON");
		break;
	case 2:
		printf("TUE");
		break;
	case 3:
		printf("WED");
		break;
	case 4:
		printf("THU");
		break;
	case 5:
		printf("FRI");
		break;
	case 6:
		printf("SAT");
		break;
	default:
		break;
	}
	
	return 0;
}

 

그리고 다른 분들의 해결법을 보고 다시 작성한 코드이다.

#define _CRT_SECURE_NO_WARNINGS
//#include <cstdio>
#include <iostream>

int main()
{
	int month, day, totalDay = 0;
	scanf("%d %d", &month, &day);

	totalDay = day;
	int dayArray[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	for (int i = 0; i < month - 1; i++) {
		totalDay += dayArray[i];
	}

	//totalDay += day;

	switch (totalDay % 7)
	{
	case 0:
		printf("SUN");
		break;
	case 1:
		printf("MON");
		break;
	case 2:
		printf("TUE");
		break;
	case 3:
		printf("WED");
		break;
	case 4:
		printf("THU");
		break;
	case 5:
		printf("FRI");
		break;
	case 6:
		printf("SAT");
		break;
	default:
		break;
	}

	return 0;
}

 

이런 깔끔한 방법이 있었다니.. 감탄. 더 노력해야겠다.