본문 바로가기
Coding Test/C++

[프로그래머스] 2016년 C++ Code

by giem 2022. 8. 20.
반응형

이전 포스트에 이어

프로그래머스 2016년을 C++로 풀어보겠다.

 

다른 언어 풀이를 보고 싶다면 아래 링크를 확인해보자

2022.08.20 - [Coding Test/Python] - [프로그래머스] 2016년 Python Code

2022.08.20 - [Coding Test/JavaScript] - [프로그래머스] 2016년 JavaScript Code

2022.08.20 - [Coding Test/Go] - [프로그래머스] 2016년 Go Code


문제


구현

구현은 2016년 안에서만 계산하면 되기 때문에

모든 월의 일 수와 요일들을 배열에 넣고

결괏값을 계산했다.

 

코드로 보겠다.


코드
#include <string>
#include <vector>

using namespace std;

string solution(int a, int b) {
    string days[] = { "FRI","SAT","SUN","MON","TUE","WED","THU" };
    int month[] = { 31,29,31,30,31,30,31,31,30,31,30 };
    int sum = 0;
    for (int i = 0; i < a - 1; ++i)
    {
        sum += month[i];
    }
    return days[(sum + (b-1)) % 7];
}

a-1까지 반복문을 돌아서

month를 sum 해서 추가하고 일을 추가해서 계산할 수 있게 했다.

mod(%) 연산과 맞게 하기 위해

금요일부터 배열에 넣었다.


다른 풀이

C++에서도 별다른 풀이가 없지만

이전 포스트와 마찬가지로 출제자의 의도를 회피하기 위해 tm을 써서 풀어보았다

#include <string>
#include <vector>
using namespace std;

string solution(int a, int b)
{
    vector<string> w_days = { "SUN","MON","TUE","WED","THU","FRI","SAT" };

    tm t = {};
    t.tm_year = 2016-1900;
    t.tm_mon = a - 1;
    t.tm_mday = b;

    mktime(&t);
    return w_days[t.tm_wday];
}

 

tm 구조체는 살짝 불편한 게 1900년도 기준으로 시작되는 시간 값이라

1900을 빼서 연도를 구해주어야 한다.

이 외에는 다양한 기능이 있어 아주 편하게 사용할 수 있다.

 

이 방법도 여러 연도가 있다면 훨씬 괜찮은 방법이고 아주 간단하게 풀 수 있다.

반응형

댓글