2016년 A월 B일
2016년 1월 1일은 금요일입니다. 2016년 A월 B일은 무슨 요일일까요? 두 수 A,B를 입력받아 A월 B일이 무슨 요일인지 출력하는 getDayName 함수를 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각SUN,MON,TUE,WED,THU,FRI,SAT
를 출력해주면 됩니다. 예를 들어 A=5, B=24가 입력된다면 5월 24일은 화요일이므로 TUE를 반환하면 됩니다.
1. 처음 생각한 로직
월마다 일 수가 다르다.
a월이 1,3,5,7,10,12 > 31일
a월이 4,6,8,9,11 > 30일
a월이 2 > 28일일별로 요일이 다르다.
const day = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"]
7일 day[0]
6일 day[6]전체 일수가 x라면
x일을 7로 나눈후 나머지값 arr[x%7]
x의 값은 ?전체 일수를 배열과 연결하자.
31일 + 1 = 32 // 배열에서 금요일부터 32번 후의 값
1월0
2월31일 + b
3월31일 + 29일 + b
4월31일 + 29일 + 31일 + b
5월31일 + 29일 + 31일 + 30일 + b
6월31일 + 29일 + 31일 + 30일 + 31일
=31일 * 3 + 30일 * 2 - 1
7월31일 * 3 + 30일 * 3 -1
8월31일 * 4 + 30일 * 3 -1
9월31일 * 5 + 30일 * 3 -1
10월31일 * 5 + 30일 * 4 -1
11월31일 * 6 + 30일 * 4 -1
12월31일 * 6 + 30일 * 5 -1
1 | function getDayName(a, b) { |
2. case 문이 너무 비효율적이다. > 반복문으로 바꾸자
1 | function getDayName(a, b) { |
3. Date 메소드를 사용해보자.
메소드 사용
1 | function getDayName(a, b) { |
템플릿 리터럴을 사용하지 않으면 값이 이상하게 나온다.
이유
1
2
3
4new Date();
new Date(value);
new Date(dateString);
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);** dateString*
날짜를 표현하는문자열값
. 문자열은 parse 메소드에 의해 인식가능한 형식이어야 한다.** year, month, date*
날짜의 각 부분을 표현하는정수값
. 월(month)부분은 0부터 11까지의 값을 가지며, 0이 1월을, 11이 12월을 가리킨다.때문에 템플릿 리터럴로 넣게 되면 문자열이 되어서 그대로 파싱하지만, 숫자일 경우 배열의 인덱스값으로 인지하여서 월의 시작숫자가 0이게 된다.
즉, let date = new Date(2016,a-1
,b) 이렇게 넣어야 한다.