🌷 문제 설명
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) {
// 윤년: 2원 29일 까지 있고, 1년 366일
let month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
let day = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"];
let answer = "";
let sum = 0;
for (let i = 0; i < a - 1; i++) {
sum += month[i];
}
sum += b - 1;
answer = day[sum % 7];
return answer;
}
- 구현 설명
👉 먼저 날짜와 요일에 대한 정보를 담은 배열을 생성(month, day)하고 Month(a)까지의 날짜 수를 모두 더한다.(sum) sum에 Day값(b)을 더하는데 현재 문제에서 기준 일이 1/1일이므로 빼기 1을 해준다!
그리고 7일 간격으로 날짜는 반복되므로 7의 나머지를 구하면 정답을 구할 수 있다
* 또한 문제에서 1월 1일이 금요일 이라고 했으므로 요일의 배열의 시작을 "FRI"로 해주었다
처음에는 Date()메소드의 존재자체를 몰라서 구글에 요일 구하기 알고리즘을 검색해봤다.. 하하
나중에 알고보니 Date()로 한, 두줄이면 풀 수 있었다는 것에 크게 뒤통수를 맞았지만 이렇게 하나 더 크게 알아갔다고
생각해야지 뭐 우째 ㅎ 메소드 공부 뿐만아니라 객체나 클래스도 공부를 더욱 열심히 해야겠다고 생각하게된 문제였다!!
있는걸 활용하려면 우선 많이 알아야한다! 모르면 검색도 못하니까^^
🌷 다른 문제 풀이
👉 자바스크립트에서 지원하는 Date 클래스를 이용
1.
function solution(a, b) {
let day = new Date(2016, a - 1, b); // 날짜 구하기
return day.toString().slice(0,3).toUpperCase();
}
생성된 Date를 문자열로 반환하면 앞 세 글자(0~2 인덱스)는 요일의 줄임말
2.
function solution(a, b) {
// WEEKDAY에 일~토까지 요일 넣어줌
const WEEKDAY = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
let day = new Date(2016, a - 1, b); // 날짜 구하기(월은 0부터 시작이므로 -1해주기)
return WEEKDAY[day.getDay()]; //getDay()함수는 날짜의 요일을 받아오는 함수로 일요일부터 토요일까지 0부터 6을 반환
}
getDay() 함수는 일요일부터 토요일까지를 각각의 숫자인 0부터 6까지로 반환
🌷 객체
- Date 객체: 날짜를 저장할 수 있고, 날짜와 관련된 메서드도 제공해주는 내장 객체
- - 객체 생성하기
- 1. new Date()
- () 안에 아무런 인수를 전달하지 않으면 현재 날짜와 시간을 리턴
- 2. new Date("날짜를 나타내는 문자열")
- 인수로 날짜를 나타내는 문자열을 전달하면 날짜와 시간을 나타내는 인스턴스를 리턴
- MONTH는 0(1월)부터 11(12월) 사이의 숫자로 이루어짐
- 3. Date 생성 시 사용 가능한 날짜 양식
-
- ISO 날짜 양식 : YYYY-MM-DDTHH:MM:SS
- Long 날짜 양식 : MMM DD YYYY / DD MMM YYYY
- Short 날짜 양식 : MM DD YYYY / YYYY MM DD
- Full 날짜 양식 : Thu Mar 14 2022 13:32:00 GMT+0900 (대한민국 표준시)
-
- Dae 객체의 메서드
- getFullYear(): 연도(네 자리수)를 반환
- getMonth(): 월을 반환(0~11)
- getDate(): 일을 반환(1~31)
- getHours(), getMinutes(), getSeconds(), getMilliseconds(): 시, 분, 초, 밀리초 반환
- getDay(): 일요일을 나타내는 0부터 토요일을 나타내는 6까지의 숫자 중 하나를 반환
'알고리즘' 카테고리의 다른 글
[프로그래머스 / 코딩테스트 연습] 수박수박수박수박수박수?-자바스크립트(javascript) (0) | 2023.04.10 |
---|---|
[프로그래머스 / 코딩테스트 연습] 문자열 다루기 기본-자바스크립트(javascript) (1) | 2023.04.10 |
[프로그래머스 / 코딩테스트연습] 행렬의 덧셈 (0) | 2023.04.07 |
[프로그래머스 / 코딩테스트 연습] 핸드폰 번호 가리기 (0) | 2023.04.07 |
[프로그래머스 / 코딩테스트 연습] 없는 숫자 더하기 (0) | 2023.04.07 |
댓글