[코딩 테스트] javaScript #6

안광의·2021년 6월 29일
0

코딩 테스트

목록 보기
6/38
post-thumbnail

문제

문제 설명
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일같은 날짜는 주어지지 않습니다)

입출력 예

abresult
524"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 객체를 사용하면 변환과정없이 바로 출력이 가능할 것이다.

profile
개발자로 성장하기

0개의 댓글