[코딩테스트] 프로그래머스 2016년 자바스크립트
이 문제를 풀기 전에 알면 좋은 개념이 있다.
바로 "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()로 대문자 변형시키면 바로 정답을 도출해 낼 수 있다 : )
코딩테스트를 하면 할수록 새롭게 배워가는 것이 많다.
재밌다. 더 알고싶고 더 배우고싶다.