알고리즘_JS/프로그래머스_Level1
[프로그래머스 JavaScript] 2016년
[리우]
2021. 6. 9. 16:57
프로그래머스 Level1 2016
문제 설명 : 단순 해당 일과 월이 주어졌을때, 맞는 날짜를 출력해주면된다.
저는 문제접근을 다음과 같이 구상했습니다.
기본적으로는 2016년만 해당하면 되기 때문에 2016년에 해당하는 각 월마다 날짜요일을 배열로 넣어주고
각 월에 따라 일수를 계산하면 되지만 친구가 년도, 월, 일에 상관없이 날짜 구하는 공식이 있다는 얘기를 듣고나중에 비슷한 문제가 나왔을때 써먹기 위해 공식을 이용했습니다.
* 젤러 공식 - 그레고리력
function solution(a, b) {
var answer = '';
let y = 16;
//날짜구하는 젤러 공식 그레고리력...
let date = {
0:'SAT',
1:'SUN',
2:'MON',
3:'TUE',
4:'WED',
5:'THU',
6:'FRI',
};
//1,2월인 경우 13,14월로 계산해주고
//12월이 넘어 가므로 입력해 -1년도로 맞춰줌
if(a===2 || a===1){
a += 12;
y -= 1;
}
//공식에의해 내림차순으로 계산
let h = ((b+Math.floor(13*(a+1)/5)+y+Math.floor(y/4)+Math.floor((20/4)-40)) % 7);
//h가 음수가 나올 경우가 존재한다.(세기의 값에 따라)
//mod 7에따라 해당 음수 +7을 해주면된다.
if(h<0) h+=7;
answer = date[h];
return answer;
}
코드 설명 : 해당 공식에 따라 연산을 해주고 각 날짜에 맞는 요일을 선택하여 출력해주면됩니다.
공식을 사용하되 두가지 조건을 처리해주어야합니다.
젤러 공식 설명에도 나와있듯이 1월과 2월일 경우 13월 14월로 바꿔주고 년도 -1년을 해줘야합니다.
그리고 공식에서 나온값이 세기의 값에 따라 음수가 나올수도 있습니다. 이 경우 절대값으로 바꿔준후 7로 나눠주면 양수로 계산했을때와 같은 값이 나옵니다.
*해당 문제에서 세기는 20으로 고정이기 때문에 20으로 고정해줬습니다.
728x90