본문 바로가기

Algorithm/Implementation

(C++) - 프로그래머스(연습문제) : 2016년

반응형

programmers.co.kr/learn/courses/30/lessons/12901

 

코딩테스트 연습 - 2016년

2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까

programmers.co.kr

간단한 요일계산 문제였습니다.

 

풀이방법

 1. 윤년이므로 2월은 29일입니다. 1년 366일인 해이죠. 각 달의 일 수를 반환해주는 함수를 만들어줍니다.

 2. a이전 달까지의 일수 + b일 하게 된다면 1월 1일부터 지나온 총 일 수가 나옵니다. 이를 7로 나눈 나머지를 구한 결과를 구한 뒤 각 요일에 맞게 반환해주면 됩니다.

 

Code

#include <bits/stdc++.h>
using namespace std;

int getDay(int month){
    if(month==1) return 31;
    if(month==2) return 29;
    if(month==3) return 31;
    if(month==4) return 30;
    if(month==5) return 31;
    if(month==6) return 30;
    if(month==7) return 31;
    if(month==8) return 31;
    if(month==9) return 30;
    if(month==10) return 31;
    if(month==11) return 30;
    if(month==12) return 31;
}

string whichDay(int day){
    if(day%7==1) return "FRI";
    if(day%7==2) return "SAT";
    if(day%7==3) return "SUN";
    if(day%7==4) return "MON";
    if(day%7==5) return "TUE";
    if(day%7==6) return "WED";
    if(day%7==0) return "THU";
}

string solution(int a, int b) {
    string answer = "";
    int day = 0;
    for(int i = 1; i < a; i++){
        day += getDay(i);
    }
    day += b;
    return whichDay(day);
}