문제
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년은 윤년입니다
요점
일 수를 계산해 요일을 알아낼 수 있어야 한다. 나는 딥다이브에서 읽었던 Date.prototype.getDay() 메서드를 사용했다.
date메서드는 주어진 객체의 요일을 나타내는 정수를 반환한다.
예를 들어 new Date('2016/05/24').getDay() = 2
일, 월, 화, 수, 목, 금, 토 순서대로 0, 1, 2, 3, 4, 5, 6을 반환한다.
이때 Date안에 객체의 월, 일이 한자리 숫자여도 된다. 앞에 0을 꼭 붙이지 않고 전달해도 된다.
new Date('2016/05/04').getDay() === new Date('2016/5/4').getDay()
풀이
반환되는 정수를 날짜로 표현하기 위해 날짜 순서를 담은 배열을 만들어 이용했다.
function solution(a, b) {
let date =["SUN","MON",'TUE','WED','THU','FRI','SAT']
let answer = new Date(`2016/${m}/${d}`).getDay();
return date[answer];
}
Reference 풀이
Date메서드를 모를때 유용하다.
각 월의 일수를 배열에 넣고 [해당 월(a) 이전까지의 일 수] + [해당 월의 일 수(b)]를 더해 7로 나눴다. 이 때 1월1일이 금요일이므로, 위의 풀이와는 달리 date배열은 'THU'부터 시작해야 한다.
function solution(a, b) {
const monthDay = [31,29,31,30,31,30,31,31,30,31,30,31]
const weekDay = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"]
let days = b //현재 달의 날짜
//반복문을 통해 현재 달 이전까지의 모든 일 수를 더 한다.
for(let i=0 ; i<a-1 ; i++)
days += monthDay[i];
return weekDay[days%7]; //7로 나누고 남은 수로 요일을 찾는다.
}
'코딩 - 알고리즘' 카테고리의 다른 글
[프로그래머스, 2단계] H-index (자바스크립트) (feat.11번,16번 테스트) (0) | 2023.05.19 |
---|---|
프로그래머스 - 푸드파이트 대회 (0) | 2023.04.18 |
프로그래머스 - n개의 최소공배수 (자바스크립트) (0) | 2023.04.10 |
프로그래머스 - 멀리뛰기 자바스크립트(JavaScript) (0) | 2023.04.08 |
[프로그래머스] 예상대진표 (자바스크립트, JS) (0) | 2023.04.03 |