Lasiyan
Algorithm

2016년 요일 구하기

#알고리즘#C++#날짜 계산#프로그래머스

문제

2016년 1월 1일은 금요일입니다. 2016년 A월 B일은 무슨 요일일까요? 두 수 A,B를 입력받아 A월 B일이 무슨 요일인지 출력하는 getDayName 함수를 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각

SUN,MON,TUE,WED,THU,FRI,SAT

를 출력해주면 됩니다. 예를 들어 A=5, B=24가 입력된다면 5월 24일은 화요일이므로 TUE를 반환하면 됩니다.

풀이

2016년의 특정 날짜가 몇 요일인지 구하는 알고리즘이다.

고등학교 수학 시간에 많이 본 것 같은데.. 문제 풀이법이 기억나지 않아 직관적으로 구현하였다..

먼저 날짜와 요일에 대한 정보를 담은 배열을 생성하고

Month(a)까지의 날짜 수를 모두 더한다. 그리고 거기에 Day값(b)을 더하는데 기준 일이 1/1일이므로 빼기 1을 해준 것이다.

그리고 7일 간격으로 날짜는 반복되므로 7의 나머지를 구하면 되는데 자세히 보면

날짜의 배열을 FRI 부터 시작하였다는 점을 주목하자.

소스 코드

#include <iostream>
#include <string>
using namespace std;

string getDayName(int a, int b)
{
  /* 구현 시작부 */
  int    month[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  string day[7]    = { "FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU" };
  string answer    = "";
  int    sum       = 0;

  for (int i = 0; i < a - 1; i++)
  {
    sum += month[i];
  }
  sum += b - 1;
  answer = day[sum % 7];
  /* 구현 종료부 */

  return answer;
}

int main()
{
  int a = 5, b = 24;

  // 아래는 테스트 출력을 위한 코드입니다.
  cout << getDayName(a, b);
}

알고리즘 문제 Level 2 | 프로그래머스