[프로그래머스] 2016년
2022. 11. 2. 21:07ㆍ기록/Programmers
- 목차
문제 설명
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일같은 날짜는 주어지지 않습니다)
입출력 예
a | b | result |
5 | 24 | "TUE" |
나의 문제 풀이
function solution(a, b) {
let answer = '';
const dayArr = ['THU', 'FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED'];
const monArr = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
let count = 0;
for (let i = 0; i < a; i++) {
count += monArr[i];
}
count += b;
answer = dayArr[count % 7];
return answer;
}
- 1월 1일이 금요일이다.
- 요일 배열의 1번째 인덱스에 금요일이 올 수 있도록 배열을 만든다.
- 달마다의 일수가 들어있는 배열을 만든다.
- 윤년이므로 2월은 29일이 있다.
- 0번째 인덱스의 요소로 0을 넣어준다.
- 예) 1월 24일인 경우 0일 + 24일을 계산하기 위해
- 예) 2월 24일인 경우 31일 + 24일을 계산하기 위해
- 주어진 월 이전까지의 일 수를 누적하여 계산한다.
- 주어진 일 수를 더해준다.
- 요일 배열에서 계산한 일 수를 7로 나눈 나머지의 인덱스에 있는 요소를 찾아 리턴한다.
- 일주일은 7개의 요일을 가진다.
- 어떠한 수를 7로 나머지 연산 하더라도 7보다 작은 수가 나온다.
- 나머지인 0~6 을 사용하여 배열에서 요일 요소를 찾을 수 있다.
다른 사람의 문제 풀이
function getDayName(a, b) {
var date = new Date(2016, (a - 1), b);
return date.toString().slice(0, 3).toUpperCase();
}
function getDayName(a,b){
var arr = ['SUN','MON','TUE','WED','THU','FRI','SAT'];
var date = new Date(`2016-${a}-${b}`);
var day = date.getDay();
return arr[day];
}
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];
}