문제
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 | 프로그래머스
'Algorithm' 카테고리의 다른 글
시저 암호 (0) | 2018.12.27 |
---|---|
행렬의 곱셈 (0) | 2018.12.27 |
콜라츠 추측 (0) | 2018.12.27 |
소수 찾기 - 에라토스테네스의 체 (0) | 2018.12.27 |
최솟값 만들기 알고리즘 (0) | 2018.12.27 |