프론트엔드 개발자가 될거야./코딩테스트

[코딩테스트] 프로그래머스 2016년 자바스크립트

정니정은니 2022. 10. 13. 20:21

이 문제를 풀기 전에 알면 좋은 개념이 있다.

바로 "Date객체" !

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Date

 

Date - JavaScript | MDN

JavaScript Date 객체는 시간의 한 점을 플랫폼에 종속되지 않는 형태로 나타냅니다. Date 객체는 1970년 1월 1일 UTC(협정 세계시) 자정과의 시간 차이를 밀리초로 나타내는 정수 값을 담습니다.

developer.mozilla.org

 

나는 "Date 객체를 만드는 여러가지 방법"을 통해 해결할 수 있었다.

let today = new Date()
let birthday = new Date('December 17, 1995 03:24:00')
let birthday = new Date('1995-12-17T03:24:00')
let birthday = new Date(1995, 11, 17) // 월은 0부터 시작
let birthday = new Date(1995, 11, 17, 3, 24, 0)

문제 설명

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일같은 날짜는 주어지지 않습니다)

입출력 예

a b result
5 24 "TUE"

나의 풀이 방법

function solution(a, b) {
    const date = new Date(2016, a-1, b); //2016-05-23T15:00:00.000Z
    const weekDay = date.getDay(); //2
    const weekObj = {
        1 : "MON",
        2 : "TUE",
        3 : "WED",
        4 : "THU",
        5 : "FRI",
        6 : "SAT",
        0 : "SUN",
    }
    return weekObj[weekDay]  
}

다른 풀이 방법

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

우와 신기하다...... 

console.log(date) = 2016-05-23T15:00:00.000Z

console.log(date.toString()) = "Tue May 24 2016 00:00:00 GMT+0900 (Korean Standard Time)"

콘솔을 찍어보면 이렇게 나온다.

date객체를 string으로 바꿔주면 요일과 월을 찍어준다..!!! <- 이 점이 포인트다.

그렇게 slice메서드로 Tue를 잘라주고

toUpperCase()로 대문자 변형시키면 바로 정답을 도출해 낼 수 있다 : )

 

코딩테스트를 하면 할수록 새롭게 배워가는 것이 많다.

재밌다. 더 알고싶고 더 배우고싶다.