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;
}