앱을 개발하다가 특정일의 요일을 구해야하는 일이 생겨서 구글링을 해보았는데 알고리즘 세계에서는 꽤 흔한 알고리즘인 듯 하다.. 조건은 다음과 같다.
Q . 2020년 1월 1일이 수요일 일 때 2020년 M월 D일이 무슨 요일인지 구하는 알고리즘을 작성하시오.
A .
#include <iostream>
#include <string>
using namespace std;
string getWeekDay(int m, int d) {
int month_list[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
string week_day_list[7] = {"WED", "THU", "FRI", "SAT", "SUN", "MON", "TUE"};
string week_day = "";
int total_day = 0;
for (int i=0;i<m-1;i++) {
total_day += month_list[i];
}
total_day += d - 1;
week_day = week_day_list[total_day%7];
return week_day;
}
int main() {
cout << getWeekDay(12, 25) << endl;
}
우선 각 달의 일수와 요일을 배열로 저장한다.
for문을 돌면서 입력된 달의 전 달까지 모든 일수를 더한다.
다 더해진 일수 (total_day) 에 입력된 일수 (d) 를 더하고 1을 뺀다. 1을 빼는 이유는 1일부터 카운트했기 때문이다.
그렇게 구해진 total_day를 7로 나눈 나머지를 요일 배열의 인덱스로 넣어주면 해당 일의 요일을 얻을 수 있다.