-
Level 1 | 2016년_JavaScriptCoding Test/Programmers Level 1 2020. 3. 19. 15:24
문제 설명
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일같은 날짜는 주어지지 않습니다)
코드
// ① 요일 배열 지정하기 const solution = (month, date) => { var WEEK = [ "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" ]; var day = WEEK[new Date(2016, month - 1, date).getDay()] return day; } // ② 바로 출력하기 const solution = (month, date) => { return new Date(2016, month - 1, date) .toString() .slice(0, 3) .toUpperCase(); }
풀이
① 요일 배열 지정하기
먼저 일요일부터 토요일까지 순서대로 출력 결과물이 담긴 배열을 선언한다.
그 다음은 자바스크립트의 Date객체와 그 메소드를 이용한 것인데,
Date객체를 생성할 때 년도와 월 일을 지정하면 지역에 따른 해당 시간을 반환한다.
그렇게 생성된 Date객체에 getDay()메소드를 사용하면 요일을 [0~6]의 값으로 반환하는데각각의 값은 위에서 선언한 배열과 같은 순서로 [일요일~월요일]에 해당한다.
따라서 getDay()로 인해 반환된 값의 인덱스에 해당하는 WEEK배열의 요소를 day에 담고 해당 값을 반환함으로써 문제를 풀 수 있다.
② 바로 출력하기
Date 객체를 사용하는 것까지는 위의 풀이 방법과 동일하다.
new Date()로 객체를 생성하면 'Thu Mar 19 2020 14:22:52 GMT+0900 (대한민국 표준시)' 와 같은 값이 반환된다.
내용을 보면 가장 앞의 3글자가 요일에 해당함을 알 수 있다.
따라서 해당 Date객체를 toString()메소드를 이용해서 문자열로 변환하고
slice()함수로 1~3번째 문자열을 추출해서 대문자로 변환(toUpperCase())하면 문제를 해결할 수 있다.문제 출처: [https://programmers.co.kr/learn/courses/30/lessons/12901?language=javascript]
'Coding Test > Programmers Level 1' 카테고리의 다른 글
Level 1 | 가운데 글자 가져오기_Slice() vs Substring() (0) 2020.03.26 Level 1 | 같은 숫자는 싫어 (0) 2020.03.26 Level 1 | K 번째 수_JavaScript (0) 2020.03.19 Level 1 | 모의고사 [완전탐색]_JavaScript (0) 2020.03.12 Level 1 | 완주하지 못한 선수 [해시]_JavaScript (0) 2020.03.12