2016년(Javascript)

·2022년 9월 23일
0
post-thumbnail

2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT

입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.

제한 조건

2016년은 윤년입니다.
2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)

입출력 예

abresult
524"TUE"

나의 풀이

function solution(a, b) {
    const day = new Date(2016,a-1,b);
    const weekday = {
            0 : "SUN",
            1 : "MON",
            2 : "TUE",
            3 : "WED",
            4 : "THU",
            5 : "FRI",
            6 : "SAT",
    };
    return weekday[day.getDay()];

}

일단 a, b를 받아 날짜 형식으로 바꾸어 주었다. ,로 날짜를 구분해 줄 수는 있다. 주의할 점은 월은 0부터 시작하므로(1월이 0) 월의 숫자인 a에서 1을 빼줘야 한다는 점이다.

그리고 객체에 각각 값을 할당해 주었다. 숫자가 0이면 "SUN"이런 식으로 할당한 다음, getDay()로 0-6의 숫자를 받아 객체 값에 []로 접근하였다.

참고할 풀이 1

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];
}

이 풀이를 보니 아차 싶었다. 숫자로 할당해 주지 않아도 원래 인덱스가 0부터 시작하므로 굳이 할당해주지 않아도 문자에 접근할 수 있기 때문이다. 그리고 날짜도 yyyy-mm-dd형식으로 접근해 주었다. 나는 저렇게 접근했을 때 계속 오류가 떠서 의문이었는데, a, b가 문자 형식이라 제대로 값을 인식하지 못한 듯 하다.

참고할 풀이 2

function getDayName(a,b){
  var date = new Date(2016, (a - 1), b);
    return date.toString().slice(0, 3).toUpperCase();
}

굳이 영어 배열이나 객체를 만들어 주지 않아도, 그냥 date자체에서 값을 얻을 수 있었다.date는 원래 아래와 같이 인출이 된다.

var date = new Date(2016, 4, 24);
        console.log(date);
// Tue May 24 2016 00:00:00 GMT+0900 (한국 표준시)

인출된 값에서 알 수 있듯이 요일이 맨 앞에 나타난다. 그러므로 문자로 만든 뒤, 잘라서 대문자로 만들기만 하면 된다. 속도는 다소 느리다고 한다.

참고할 풀이 3

function getDayName(a,b){
    var dayList = ['FRI','SAT','SUN','MON','TUE','WED','THU'];
  var monthArr = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  var daySum;
  if(a < 2) {
    daySum = b - 1;
  } else {
    daySum = monthArr.slice(0, a - 1).reduce((a, b) => a + b) + b - 1;
  }
    return dayList[daySum % 7];
}

date() 함수를 쓰지 않은 풀이이다. 달의 날짜수와 요일을 배열로 나타낸 다음, 일수를 센다. 7로 나눴을 때 같은 요일은 같은 나머지를 가진다는 사실을 이용해서 풀어 줬다.

profile
전 이것도 몰라요

0개의 댓글

관련 채용 정보