이 문제를 보고 처음에는 월과 일을 나뉘어 나머지 계산을 사용하여 몇요일인지 구하자 라는 생각으로 접근하였다.
string solution(int a, int b) {
string answer = "";
int day = b%7
switch(a){
case 1:
if (day == 1) answer = "FRI";
else if(day == 2) answer = "SAT";
else if(day == 3)answer = "SUN";
else if(day == 4)answer = "MON";
else if(day == 5) answer = "TUE";
else if(day == 6) answer = "WED";
else if(day == 0) answer = "THU";
case 2:
if (day == 1) answer = "FRI";
이런식으로 말이다. 하지만 이 방식은 너무 코드가 길고 유용하지 않다.
이렇게 구현해야지한 생각은 이미 쓰레기 코드라고 인지하곤 있었다. 분명 이 방법 말고도 간단하고 이해하기 쉬운 코드가 있을거라 생각했다. 하지만 생각을 더 나아가지못하고 구글링을 했다. 역시나 있었다.
string solution(int a, int b) {
string answer = "";
int sum = 0;
int months[12] = {31, 29, 31, 30, 31,30, 31,31,30 ,31, 30,31};
string day[7] = {"FRI", "SAT","SUN", "MON", "TUE", "WED", "THU" };
for(int i = 0; i < a-1; i++){
sum = sum + months[i];
}
sum = sum + (b-1);
answer = day[sum%7];
return answer;
}
months배열에는 2016 각 달의 일수를 저장한다.
day배열에는 FRI 부터 시작하는 요일을 저장한다.
핵심은 for문을 통해 입력한 월의수(a)전까지 일수를 더하는 것이다.
해당 일(b)을 더한다. 배열은 0 부터 시작이기에 b-1을 더해준다.
다 더한 일수를 7로 나눈 나머지(인덱스로 사용)에 해당하는 요일을 반환해주면 끝이다.
조금 더 창의적으로 생각했으면 풀었을지도 모르겠다.
그래도 구글링을 통해 창의적인 방법을 습득했으니 조금의 위안을 해야겠다.