반응형
이전 포스트에 이어
프로그래머스 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을 빼서 연도를 구해주어야 한다.
이 외에는 다양한 기능이 있어 아주 편하게 사용할 수 있다.
이 방법도 여러 연도가 있다면 훨씬 괜찮은 방법이고 아주 간단하게 풀 수 있다.
반응형
'Coding Test > C++' 카테고리의 다른 글
[프로그래머스] 나머지가 1이 되는 수 찾기 C++ Code (0) | 2022.08.23 |
---|---|
[프로그래머스] 성격 유형 검사하기 C++ Code (7) | 2022.08.19 |
[프로그래머스] 약수의 개수와 덧셈 C++ Code (0) | 2022.08.17 |
[프로그래머스] K번째수 C++ Code (2) | 2022.08.16 |
[프로그래머스] 체육복 C++ Code (0) | 2022.08.10 |
댓글