Description
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"를 반환하세요.
Constraints
- 2016년은 윤년입니다.
- 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)
My Solution
function solution(a, b) {
const week = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'];
const date = new Date(`2016-${a}-${b}`);
return week[date.getDay()];
}
나는 Date를 활용하여 문제를 간단하게 해결할 수 있었다.
- Date 생성자 함수에 날짜를 나타내는 문자열을 인수로 전달하여 지정된 날짜와 시간을 나타내는 Date 객체를 반환할 수 있도록 하였다.
- 그렇게 생성된 객체에 getDay() 메서드를 사용하면 요일을 나타내는 정수를 0(일요일)부터 6(토요일)까지 반환한다.
- 그렇게 얻어진 반환값을 week의 인덱스로 활용해서 요일을 구한다.
Other's Solutions
function getDayName(a, b) {
return new Date(2016, a - 1, b).toString().slice(0, 3).toUpperCase();
}
요일은 항상 앞의 세글자라는 점을 이용해 요일이 들어 있는 배열을 만들지 않고 간단하게 풀 수 있는 방법이다.
Date()를 이용하지 않은 풀이들
Date()를 이용하지 않을 경우, 각 월의 일 수가 들어있는 배열과 요일이 들어있는 배열이 필요하다.
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];
}
function getDayName(a, b) {
var answer = '';
var MONTH = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var WEEK = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU'];
var sum = 0;
for (var i = 1; i < a; i++) {
sum += MONTH[i - 1];
}
answer = WEEK[(sum + b - 1) % 7];
return answer;
}
'Algorithms > Programmers' 카테고리의 다른 글
프로그래머스 레벨 2 : [1차] 캐시 (자바스크립트) (0) | 2022.04.24 |
---|---|
[프로그래머스 Level 1] 3진법 뒤집기 (자바스크립트) (0) | 2021.10.21 |
[프로그래머스 Level 1] 핸드폰 번호 가리기 (자바스크립트) (0) | 2021.10.18 |
[프로그래머스 Level 1] 나머지가 1이 되는 수 찾기 (자바스크립트) (0) | 2021.10.17 |
[프로그래머스 Level 1] 가운데 글자 가져오기 (자바스크립트) (0) | 2021.10.17 |