[코딩 테스트] javaScript #6
문제
문제 설명
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" |
[출처] 프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/12901)
답
function solution(a, b) { let date = [31,29,31,30,31,30,31,31,30,31,30] let day = ['FRI','SAT','SUN','MON','TUE','WED','THU'] let total = b-1 if (a === 1) total = b-1; else { for (let i=0; i<a-1; i++) { total = total + date[i] } } return day[total%7]; }
해당 날짜까지의 일수를 구해서 7로 나눈 나머지 값으로 요일을 판단하는 형태로 코드를 작성하였다. 1일이 금요일이기 때문에 day배열의 0번째 인덱스 값을 'FRI'로 설정하였고 a달의 일수는 b-1로, 1월달부터 a-1달까지는 date 배열의 누적으로 합산한 값으로 total 변수에 할당하였다. a가 12인 경우 12월달의 일수는 b-1로 계산하기 때문에 date 배열의 길이는 11까지만 할당하였다.
코드를 작성한 이후 Date 객체를 알게 되어서 훨씬 간단한 방법으로 풀 수 있다는 것을 알았다. 생각해보면 당연히 날짜 관련된 객체나 method가 있을 것이고 심지어 엑셀에도 있는 함수인데 어떤 식으로 알고리즘을 짤지 바로 생각이 나서 알아채지 못했던 것 같다. 가정이 아니라 실제로도 2016년 1월 1일은 금요일이기 때문에 Date 객체를 사용하면 변환과정없이 바로 출력이 가능할 것이다.
Author And Source
이 문제에 관하여([코딩 테스트] javaScript #6), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@bbaa3218/코딩-테스트-javaScript-6저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)