개발_자 2024. 8. 1. 09:48

 

function solution(a, b) {
    let week = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
    let dateStr = "2016-" + a + "-" + b;
    let date = new Date(dateStr);
    return week[date.getDay()];
}

 

`week` 배열 : 요일을 문자열로 저장

배열의 인덱스는 `Date`객체의 `getDay()`메서드가 반환하는 값과 일치

날짜 문자열 생성 : `"2016-" + a + "-" + b`는 연도 `2016`과 입력된 월(a)과 일(b)을 조합하여 날짜 문자열 생성

`Date`객체 생성 : `new Date(dateStr)`은 주어진 문자열 `dateStr`을 기반으로 `Date`객체를 생성

이 객체는 입력된 날짜를 나타냄

`date.getDay()`는 `Date` 객체에서 요일을 0(일요일)부터 6(토요일)까지의 숫자로 반환

이 숫자를 `week`배열의 인덱스로 사용하여 요일 문자열을 얻어 반환

 

`Date`객체는 다양한 형식의 날짜 문자열을 처리할 수 있음

 

  • YYYY-MM-DD: 연도, 월, 일을 하이픈(-)으로 구분하는 형식
    • 예: "2016-08-05"
  • YYYY/MM/DD: 연도, 월, 일을 슬래시(/)로 구분하는 형식
    • 예: "2016/08/05"
  • Month Day, Year: 월, 일, 연도를 콤마와 공백으로 구분하는 형식
    • 예: "August 5, 2016"

`new Date(dateStr)`의 동작

1. 문자열 파싱 : `Date`객체는 문자열을 파싱하여 내부적으로 날자와 시간을 표현하는 객체 생성

문자열의 형식이 표준 형식일 경우, `Date`객체는 이를 잘 인식하여 적절한 날짜를 생성

1. 객체 생성 : 문자열이 파싱된 후, `Date`객체가 생성

이 객체는 생성된 날짜와 시간을 포함하고 있으며, 다양한 메서드를 통해 날짜와 시간을 조작하거나 조회 가능

let dateStr = "2016-08-05";
let date = new Date(dateStr);

console.log(date);  // 출력: Fri Aug 05 2016 00:00:00 GMT+0000 (Coordinated Universal Time)
console.log(date.getFullYear());  // 출력: 2016
console.log(date.getMonth() + 1);  // 출력: 8 (월은 0부터 시작하므로 1을 더해줍니다)
console.log(date.getDate());  // 출력: 5

 

 

`getDay()` 메서드의 동작

형식 : `date.getDay()`

반환값 : 0~6까지의 정수 (일요일~토요일)

이 메서드는 `Date`객체가 나타내는 날짜의 요일을 숫자로 반환

요일 숫자는 배열의 인덱스처럼 사용 가능하며, 배열을 이용해 요일 이름을 쉽게 참조

 

 

 


 

다른 사람 풀이

 

function getDayName(a,b){
    var tempDate = new Date(2016, a-1, b);

    return tempDate.toString().slice(0,3).toUpperCase();
}

//아래 코드는 테스트를 위한 코드입니다.
console.log(getDayName(5,24));
function solution(a, b) {
    return new Date(2016, a-1, b).toString().slice(0,3).toUpperCase();
}

// 다른 방법
function solution(a, b) {
    // 윤년은 2월이 29일까지 있고, 1년이 366일이다.
    // 4, 100, 400으로 나누어지는 년도는 윤년이다.
    const weekToDay = ['SUN','MON','TUE','WED','THU','FRI','SAT'];
    const leapYearMonths = [31,29,31,30,31,30,31,31,30,31,30,31]; 
    let day = b+4; // 1월 1일은 FRI, b가 1일 때 인덱스로는 5가 되어야한다.
    // 1월은 이전 월의 일수를 더하지 않음으로 a-1 조건으로 해야한다.
    for(let i = 0; i < a-1; ++i){
        day += leapYearMonths[i];
    }
    return weekToDay[day%7];
}
var solution=(m,d)=>(new Date('2016-'+m+'-'+d)+'').split(' ')[0].toUpperCase()

// 또 다른 방법
var solution=(_,$)=>(new Date(2016,--_,$)+'').toUpperCase().slice(0, 3)