본문 바로가기

Algorithm

[Algorithm] 요일 구하는 알고리즘

앱을 개발하다가 특정일의 요일을 구해야하는 일이 생겨서 구글링을 해보았는데 알고리즘 세계에서는 꽤 흔한 알고리즘인 듯 하다.. 조건은 다음과 같다.

 

 

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로 나눈 나머지를 요일 배열의 인덱스로 넣어주면 해당 일의 요일을 얻을 수 있다.