https://programmers.co.kr/learn/courses/30/lessons/12901
문제설명
2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요?
두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수,
solution을 완성하세요.
요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT
제한조건
- 2016년은 윤년입니다.
- 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)
입출력 예
나의 풀이방법
function solution(a, b) {
const days = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
//각 달이 며칠까지 있는지 담는 배열
const months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30 ,31];
// 1월 1일이 금요일이었기때문에 days배열의 5번째 인덱스부터 시작한다
let startDayIdx = 5;
// 입력된 날짜까지의 일수를 담는 변수
let countDays = 0;
// for문의 제한조건을 a-1라고 준 이유는 a달의 이전 달 까지의 모든일수를 더해야하기 때문이다. a달의 일수를 더해버리면 안된다!!
for(let i = 0; i < a-1;i++){
countDays += months[i];
}
countDays += b;
return days[((countDays % 7)+startDayIdx-1)%7]
}
내가 푼것처럼 직접 구현해서 풀어도 되지만 JS에서 제공하는 Date를 사용해서 더 간단하게 풀수도 있다.
function getDayName(a,b){
let date = new Date(2016, (a - 1), b);
return date.toString().slice(0, 3).toUpperCase();
}
ㅎㅎ....정말 간단하구먼
Date
- Date를 생성할때
new Date(year, monthIndex[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);
위의 형식에 맞게 설정하고 싶은 값을 넣어주면 된다.
여기서 주의할게 monthIndex 값인데, 0은 1월을 나타내고 11은 12월을 나타낸다는것을 기억하기!!!!
위의 생성자함수를 실행하면 아래와 같은 결과가 나온다.
Thu May 26 2016 00:00:00 GMT+0900 (대한민국 표준시) {}
그래서 이러한 결과물을 문자열로 만들고 앞의 3글자를 뽑아내어 대문자로 출력하면 된다.