728x90
문제 설명
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일같은 날짜는 주어지지 않습니다)
문제 풀이 방법
- 나는 이 문제를 내장 메서드를 이용해서 풀기로 했다.
- 우선 요일을 일요일부터 토요일까지 배열에 담아주었다.
이때 일요일 부터 시작한 이유는 Date 메서드 중에 getDate() 메서드를 보니
반환하는 값의 범위가 0에서 6까지 이며 이는 일요일 부터 토요일까지 라고 적혀있기에
이를 참고하고 작성했다. - 그 다음 new Date()안에 백틱(``)을 이용해 인자로 받는 a와 b를 문자열로
정의한 뒤 new Date()안에 넣어줬다. - 그런다음 day.getDate()를 이용해 해당 요일을 반환해주면 끝이다.
내가 작성한 코드
const solution = (a, b) => {
const week = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'];
const day = new Date(`${a} ${b}, 2016`);
return week[day.getDay()];
}
하지만, 다른 사람들이 푼 문제의 댓글을 보니
알고리즘 문제에서 메서드 활용 연습이라 하니.....
내가 잘못된건가 라는 생각을 했다.....
그래서 다른 사람이 작성한 코드를 봐보자.
다른 사람이 작성한 코드
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];
}
속도는 정말 빨랐다.
우선 해당 년도에 각 달의 일수를적은 배열이 보이고,
16년 1월 1일이 목요일이기에 목요일로 시작하는 요일 배열이 보였다.
그리고 for문을 이용해서 주어진 달의 전달까지의 모든 일수와 인자로 주어진 일수를
더한 값을 %7 해서 요일을 구하는 방법이였다.
메서드 사용에 관해서는 알고리즘을 공부하는 입장에서는 잘못된 방식이라 생각할 수 있다....
하지만 나는 이 문제를 풀 때 어설프게 알고리즘을 사용하기 보다는
이미 만들어진 공인된 메서드를 사용하는 것이 더 좋을 것같다고 생각해서 사용했다.
메서드 사용은 만능이 아니기에 상황에 맞게 사용해야 한다고 생각하는 문제였다......
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
1Level / 연습문제 / 수박수박수박수박수박수? (0) | 2022.10.24 |
---|---|
1Level / 연습문제 / 하샤드 수 (0) | 2022.10.13 |
1Level / 연습문제 / 소수찾기 (0) | 2022.10.06 |
1Level / 연습문제 / 이상한 문자 만들기 (0) | 2022.10.05 |
1Level / 2018 KAKAO BLIND RECRUITMENT / [1차] 비밀지도 (0) | 2022.10.04 |