문제: https://programmers.co.kr/learn/courses/30/lessons/12901
코드1.
function solution(a, b) {
const days = [ "THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"];
let totalDays = 0;
const days_31 = [1, 3, 5, 7, 8, 10, 12];
for(let i = 1; i <= a; i++){
if(i === a) break;
if(days_31.includes(i)) {
totalDays += 31;
continue;
}
if(i === 2) {
totalDays += 29;
continue;
}
else {
totalDays += 30;
}
}
totalDays += b;
return days[totalDays%7];
}
처음 문제를 보고는 어떻게 해야할지 감이 안잡혔다..ㅋㅋㅋㅋ 그런데 다른 사원분의 일수 계산하면 되겠다는 말에 문제가 급 쉬워짐. 31일이 들어가는 달만 배열에 넣어놓고, 분기를 걸어 총 일 수를 계산한다. 그리고 7을 나눈 나머지를 이용해서 해당하는 인덱스의 요일을 반환하면 끝! 그런데 검색하다보니, 아예 모든 달의 총 일수를 한 배열에 넣어놓은 코드를 봤는데 훨씬 깔끔하고 가독성도 좋았다. 조건문도 없고. 다음 복습할 때는 그런식으로 풀어봐야겠다.
코드2. 다른사람풀이 중 Date 객체 이용
function getDayName(a,b){ var arr = ['SUN','MON','TUE','WED','THU','FRI','SAT']; var date = new Date(`2016-${a}-${b}`); var day = date.getDay() return arr[day]; }
그리고 Date객체를 이용해서 푼 사람이 생각보다 많았다. 아니 그냥 대부분..?
코딩테스트 문제여서 이렇게 해도 되나 싶긴하지만, 그래도 실무에선 Date, moment 등을 이용하는게 많을테니ㅋㅋㅋㅋ 혹시나해서 기록해두기로! 회사에서 다들 농담삼아 Date 이용해봐요 했는데 이게 진짜 있을줄이야… 혹시 코테 보신분들 이렇게 풀어도 되는건가요…