hayeonn 2022. 9. 24. 22:20
반응형

[풀이]

function solution(a, b) {
  const days = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];

  const date = new Date();
  date.setFullYear(2016, a - 1, b);

  const result = days[date.getDay()];

  return result;
}

1. 먼저 days 변수를 만들고 요일을 배열 안에 넣어준다.

2. new Date()를 이용해 2016년 a월 b일을 설정해준다.

3. 이때 자바스크립트에서 월은 (현재 월 -1)을 해줘야한다. (예시 : 2월은 자바스크립트에서 1임)

4. 마지막으로 배열에서 그 날의 요일을 받아온다.

 
[코드 리뷰]
function solution(a, b) {
  const days = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
  const date = new Date(2016, a - 1, b);
  
  return days[date.getDay()];
}

메서드 체이닝과 setFullYear을 호출하기 보다 new Date를 통해 인스턴스를 생성할 때 인자로 넘겨 설정해 코드를 줄였다.

훨씬 보기 깔끔하다. result 변수를 만들기보다 그냥 return 해버리면 된다.

 

[추가 풀이]

1. swith 사용

function solution(a, b) {
  const resultDay = new Date(2016, a - 1, b);

  switch (resultDay.getDay()) {
    case 0:
      return "SUN";

    case 1:
      return "MON";

    case 2:
      return "TUE";

    case 3:
      return "WED";

    case 4:
      return "THU";

    case 5:
      return "FRI";

    case 6:
      return "SAT";
  }
}

 

2. toString과 slice

function solution(a, b) {
  const dayStr = new Date(2016, a - 1, b).toString();

  return dayStr.slice(0, 3).toUpperCase();
}

toString 으로 바꾸면,

'Tue May 24 2016 00:00:00 GMT+0900 (Korean Standard Time)'

이렇게 나오는데 이것을 slice(0, 3)해주면 "Tue"만 잘리게 된다!