[ 프로그래머스 ] 2016년 (연습문제)
코드
#include <string>
#include <vector>
#include <iostream>
using namespace std;
string solution(int a, int b) {
std::vector<int> month;
std::vector<string> daily;
string pushDaily[7] = {"SUN","MON","TUE","WED","THU","FRI","SAT"};
string answer;
int aTotal = 0;
int bTotal = 0;
int startMonth = 0;
int startDate = 0;
int answerDate = 0;
for(int i=0;i<7;i++){
daily.push_back(pushDaily[i]);
}
//각각의 월에 해당되는 값 처리
for(int i=1;i<=12;i++){
if(i == 2){ //윤달인 2월만 따로 처리
int monthNum = 1;
month.push_back(monthNum);
}else if(((i%2==1)&&i<8)||((i%2==0)&&i>7&&(i!=2))){
int monthNum = 3;
month.push_back(monthNum);
}else if(((i%2==0)&&i<8&&(i!=2))||((i%2==1)&&i>7)){
int monthNum = 2;
month.push_back(monthNum);
}
}
for(int i=0;i<a-1;i++){
aTotal += month[i];
}
aTotal = aTotal%7 - 2;
if(aTotal >= 0){
startMonth = aTotal;
}else if(aTotal<0){
startMonth = 7 + aTotal;
}
//시작하는 일에 따른 요일 처리
bTotal = b%7 - 1;
if(bTotal >= 0){
startDate = bTotal;
}else if(bTotal < 0){
startDate = 7 + bTotal;
}
answerDate = startMonth + startDate;
if(answerDate >= 7){
answerDate = answerDate - 7;
}
answer = daily[answerDate];
return answer;
}
먼저 aTotal과 startMonth는 월, bTotal과 startDate는 일에 관련된 변수. 2월은 윤달이므로 다른 달들과는 다르게 29일까지만 있으니 예외로 처리해주고, 나머지 달들은 30일과 31일에 해당되는 것들을 처리해줬음