[프로그래머스/C++] ㅡ LV1 - 2016년

2021. 2. 26. 15:03필요/코딩테스트(프로그래머스)

문제

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

 

코딩테스트 연습 - 2016년

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

programmers.co.kr

풀이

#include <string>

using namespace std;

string solution(int a, int b) {
    int monthDay[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};	// 월당 일수
    string dOW[] = {"THU","FRI","SAT","SUN","MON","TUE","WED"};	// 요일 종류
    int days = 0;
    for (int i=0; i<a-1; i++) {	// 지난 월들에 대한 일수 추가
        days+=monthDay[i];
    }
    days+=b;	// 이번 달 일수 추가
    days%=7;
    string answer = dOW[days];
    return answer;
}

개념

2016년은 윤년이라고 한다.

윤년은 2월 29일이 추가되어, 1년동안 날짜의 수가 366일이 되는 경우이다.

문제 이름이 2016년인 이유가 있었다..


풀이

1월~12월의 일수를 저장하는 int형 배열을 정의한다.

그리고 요일의 이름을 저장하는 문자열 배열을 정의한다.

 

a = 5 라면, a = 1~4까지의 일수를 모두 더해서 days 변수에 저장한다.

 

그리고 days 변수에 b를 더한다.

 

월~일 요일이 7일마다 반복되므로, % (나머지) 연산자를 사용한다.

 

1월 1일이 금요일인 것을 설정해야하는데, dOW 배열의 순서를 그에 맞춰 변경했다.