#include <iostream>
#include <cstring>
using namespace std;
#define START 1
#define END 7
char *WEEK[8] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void End_MONTH(int x, int *y, int *z, int a);
void Calculate_INDEX(char* x, int *y);
int main() {
int T, END_MON, MON, MON_BEFORE, THIS_DAY, DAYS,INDEX= 0;
int WEEKDAY[8]={NULL};
char DAY_CHAR[10]={NULL};
cin>>T;
while(T--){
cin>>MON>>DAYS>>DAY_CHAR;
End_MONTH(MON, &END_MON, &MON_BEFORE, DAYS);
Calculate_INDEX(DAY_CHAR, &INDEX);
// 인덱스를 기준으로 배열의 왼쪽을 채움
THIS_DAY= DAYS;
for(int i= INDEX; i>= START; i--) {
WEEKDAY[i-1]= THIS_DAY;
THIS_DAY--;
if(THIS_DAY <1) THIS_DAY= MON_BEFORE;
}
// 인덱스를 기준으로 배열의 오른쪽을 채움
THIS_DAY= DAYS;
for(int i= INDEX; i<= END; i++) {
WEEKDAY[i-1]= THIS_DAY;
THIS_DAY++;
if(THIS_DAY >END_MON) THIS_DAY= START;
}
for(int i= 0; i<6; i++) {
cout<<WEEKDAY[i]<<" ";
}
cout<<WEEKDAY[6]<<endl;
}
system("pause");
}
// 현재 월, 지난 월의 마지막 일수를 계산해서 저장
// 다음 달의 경우, 1일부터 시작하므로 변수에 저장하지 않음
void End_MONTH(int x, int *y, int *z, int a) {
// 일수가 31일인 달
if(x == 1 || x == 3 || x == 5 || x == 7 || x == 8 || x == 10 || x == 12) {
// 예외값 처리
if(a <1 || a> 31) exit(1);
//8월과 1월의 경우, 지난 달의 일수는 31일
if(x == 8 || x == 1) {
*y= 31; *z= 31;
return;
}
// 3월의 경우, 지난 달의 일수는 28일
if(x == 3) {
*y= 31; *z= 28;
}
*y= 31; *z= 30;
return;
}
// 일수가 28일인 2월
else if(x == 2) {
if(a <1 || a> 28) exit(1);
*y= 28; *z= 31;
return;
}
// 일수가 30일인 달
else {
if(a <1 || a> 30) exit(1);
*y= 30; *z= 31;
return;
}
}
// 입력받은 문자열이 한 주의 몇 번째 일수에 위치하는지 인덱스 계산
void Calculate_INDEX(char* x, int *y) {
int k= 0;
for(int i=0; i<END; i++) {
k =strcmp(x, WEEK[i]);
if(k== 0) {
*y= i+1;
return;
}
}
if(*y ==0)
exit(1);
}
출력 결과만 보면 문제가 없는 것처럼 보이나, 답안 제출 시 오답 판정된다.
디버깅이 끝나면 해당 부분을 고쳐 수정할 계획이다.
'language > 알고리즘' 카테고리의 다른 글
MISPELL (0) | 2016.07.19 |
---|---|
XOR 연산자를 이용한 Swap (0) | 2016.07.18 |
ENDIANS (0) | 2016.07.18 |
알고리즘: 효율, 분석 그리고 차수 (0) | 2016.07.10 |