2016년

WooBuntu·2020년 7월 26일
0

2016년

2020.07.26

const DAYS = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
// 상수는 대문자로

const solution = (a, b) => {
  const date = new Date(2016, a - 1, b);
  return DAYS[date.getDay()];
};
  • 당연히 이렇게 풀라고 낸 문제가 아니겠지

  • 다른 사람의 풀이를 보니 역시 Date객체를 쓰지 않고도 풀 수 있는 문제였다.

  • 윤년인 것을 감안하여 한 달이 몇일인지를 구성하면 되는 문제였다.

  • 개선할 점을 고려하여 코드를 다시 구성해보면 아래와 같다.

const DAYS = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
const MONTHS = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
// 상수는 대문자로

const reducer = (acc, current) => {
  return acc + current;
};

const solution = (a, b) => {
  let duration = MONTHS.filter((num, idx) => idx < a - 1).reduce(reducer, 0);
  // reduce함수에 초기값을 지정해주지 않으면 MONTHS.filter()의 결과가 빈 배열일 때
  // 에러가 발생하는 것 같다.

  duration += b - 1;
  // 1월 1일이라 1을 빼주어야 함

  return DAYS[(5 + duration) % 7];
  // 1월 1일이 금요일(인덱스 값=5)
};
  • 나름대로는 함수형으로 짠다고 한 건데, 또 이거에 너무 집착하는 건 아닌지 모르겠다.

2020.09.12

function solution(a, b) {
  const DAYS = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"];
  const MONTHS = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  let duration = 0;
  for (let i = 0; i < a - 1; i++) {
    duration += MONTHS[i];
  }
  duration += b - 1;
  return DAYS[duration % DAYS.length];
}

0개의 댓글