IT/Algorithm
[프로그래머스] 2016년 | C++
ttoogi
2022. 8. 20. 15:07
https://school.programmers.co.kr/learn/courses/30/lessons/12901
문제 설명
2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT 입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.
제한 조건
- 2016년은 윤년입니다.
- 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)
입출력 예
a | b | result |
5 | 24 | "TUE" |
풀이
매달 첫 날의 요일을 구한다.
7*n번째 주 + d일 = b일 -> d일의 요일과 동일
a월 b일을 2016년 1월 1일로부터 지난 날짜를 구해서 모듈러 연산을 한다.
#include <string>
#include <vector>
using namespace std;
int get_days(int month) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 2:
return 29;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
return 0;
}
return 0;
}
string get_day_str(int day) {
int res = day % 7;
switch(res) {
case 1: return "FRI";
case 2: return "SAT";
case 3: return "SUN";
case 4: return "MON";
case 5: return "TUE";
case 6: return "WED";
default: return "THU";
}
return "";
}
string solution(int a, int b) {
string answer = "";
int day = 0;
for (int i=1; i<a; i++) {
day += get_days(i);
}
day += b;
answer = get_day_str(day);
return answer;
}