반응형
내 기준으로는 너무 어려웠다. Date 객체를 쓰지 않고 어떻게든 풀어보려고 했는데 머리가 터질 것 같아서 Date 객체를 써버리고 말았다.
-Date 객체를 이용한 풀이-
function solution(a, b) {
var answer = '';
const day = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
const date = new Date(`2016 ${a} ${b}`);
answer = day[date.getDay()]
return answer;
}
-Date 객체를 이용하지 않은 다른 사람의 풀이-
function solution(a, b) {
var answer = '';
const lastDayOfMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
const day = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
let c = b+1;
for(let i=0; i<a; i++) {
c += lastDayOfMonth[i];
}
answer = day[c%7];
return answer;
}
이 문제를 이런식으로도 처리할 수 있다는 것을 알고 놀라웠다. 입력 받은 b의 값에 1을 더해서 c에 넣고 그 c에 월의 마지막 일 수를 더하고 그 값을 7로 나눈 값의 나머지를 구해서 해결한다니...
b의 값에 1을 더해주는 이유는 1을 안 더해 주면 요일이 한 날씩 앞당겨지기 때문이다. (나머지가 day의 인덱스 값이기 때문에 나머지가 1 더 나올수 있도록 해주는 것임)
예를들어서 2월 29일의 요일을 구하고 싶으면 for반복문에 의해서 c = c + lastDayOfMonth[0] + lastDayOfMonth[1] 을 계산해줘야 한다. 여기서 a값은 2이고 b의 값은 29이다. c에는 b+1의 값이 들어가 있어서 c = 30 + 31 + 29 = 90이 되고 90/7=12, 나머지 6, 나머지가 day의 인덱스 값이니까 day[6]인 토요일이 2월 29일의 요일이 되는 것이다.
반응형
'공부 > 프로그래머스' 카테고리의 다른 글
프로그래머스 레벨 1 없는 숫자 더하기 자바스크립트 풀이 (0) | 2022.01.10 |
---|---|
프로그래머스 레벨 1 음양 더하기 자바스크립트 풀이 (0) | 2021.12.30 |
프로그래머스 레벨 1 직사각형 별찍기 자바스크립트 풀이 (0) | 2021.12.25 |
프로그래머스 레벨 1 수박수박수박수박수박수? 자바스크립트 풀이 (0) | 2021.12.25 |
프로그래머스 레벨 1 두 정수 사이의 합 자바스크립트 풀이 (0) | 2021.12.24 |