[ 프로그래머스 ] 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일에 해당되는 것들을 처리해줬음 image