[Level 1] 2016년

문제 설명

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"

내 방식

function solution(a, b) {
    let answer = Number();
    let dates = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // 월별일수
    let days = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"]; // 요일
    for(let i = 0; i < (a-1); i++) { // 월 - 1월 일수 계산하기 마지막 월은 b일이어서 따
        answer += dates[i]
    }
    answer += b - 1; // array는 0부터 시작하므로
    answer = days[(answer % 7)]
    return answer;
}

날짜 수를 더해서 계산해야 하기 때문에 answer를 숫자로 만들어 두고, array에 2016년 일수를 넣었다. 2016년은 금요일이 시작이어서 요일 array의 시작을 금요일부터 설정했다. for문을 사용하여 a - 1 (마지막 달은 일 수를 따로 계산해야 하기 때문) 전 달까지 일 수를 더하고, 일 수를 사용하여 answer에 마지막 달의 일 수를 더했다. array는 0부터 시작하기에 1을 따로 빼주었다. 그렇게 해서 나온 일 수를 7로 나누어 값을 구했다.

  • 2021-06-23
function solution(a, b) {
    var answer = b;
    let dates = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    let days = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"];
    for(let i = 0; i < a - 1; i++) {
        answer += dates[i];
    }
    return days[answer % 7 - 1];
}

// 일수를 더하기 위하여 answer의 기본값을 b로 정해 a월의 요일 수를 더한다.
// 금요일부터 시작하는 요일 배열과 12달의 일수를 담은 배열을 만든다.
// a월보다 한 달 적게 요일수를 더한다.
// 7로 나눈 후 dates의 인덱스를 return한다.
// 이 때 인덱스는 0부터 시작하므로 1을 빼준다.

다른 사람의 방식

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];
}

Date 객체를 사용하여 문제를 풀었다. 훨씬 간단하고 쉬운 방법인 것 같다.

정리

좋은 웹페이지 즐겨찾기