[Algorithm] 프로그래머스_2016년

이나현·2021년 9월 21일
0

algorithm

목록 보기
3/3
post-thumbnail

프로그래머스 문제 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일같은 날짜는 주어지지 않습니다)

문제 풀이

function solution(a, b) {
    let newDate = new Date(2016, a-1, b+1)
    let getD = newDate.getDay()
    let day;
switch(getD){
    case 0:
    day ='SAT';
    break;
    case 1:
    day = "SUN";
    break;
    case 2:
    day = "MON";
    break;
    case 3:
    day = "TUE";
    break;
    case 4:
    day = "WED";
    break;
    case 5:
    day = "THU";
    break;
    case 6:
    day = "FRI";
    }
    return day;
}

풀이과정 설명

  1. newDate 변수로 2016년의 월, 일을 담는다.

    let newDate = new Date(2016, a-1, b+1) 에서 월(a)에 -1을하고 일(b)에 +1을 한 이유?
    javascript에서는 1월을 0부터 계산하기 때문에 a-1을 했다.
    b는 프로그래머스에서 콘솔을 찍어보았을 때, 계속 b일자만 했을 때 -1이 되는 결과값이 나오기 때문에 원하는 일자를 구하기 위해 +1을 해주었다. (ex. 2016, 1, 1 > 2015, 12, 31)

  2. getDay() 메서드

    현지 시간에 따라, 주어진 날짜의 요일에 해당하는 0 이상 6 이하의 정수.

  3. switch 문
    switch문에 따라 해당하는 수를 case로 담아서 일자를 반환했다.
    switch문을 모던 자바스크립트 deep dive에서 예제로 봤는데 한번 써보고 싶어서 사용하게 되었다. (+ getDay() 공식문서의 예제도 switch문이어서 사용하게되었다.)

해당 문제를 어떻게 풀까 고민을 많이했는데 메서드를 이용해서 풀게 되었다. 메서드 없는 알고리즘으로 푸는 연습을 해야하는데..라고 생각이 들어서 찾아본 다른 사람의 답!

메서드 없는 풀이

function solution(a, b) {
    var answer = '';
    var month = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // 달마다 날짜 수
    var week = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"]; // 요일
    
    for(let i = 1; i<a; i++){ // 주어진 달보다 적게 
        let day = month[i]%7; // 달의 마지막 날의 요일 인덱스 값
        for(let j=0; j<day; j++){ // 요일 배열 재정비
            let back = week.shift(); // 앞의 요소 빼기
            week.push(back); // 뺀 요소 다시 추가
        }
    }
    let d = b%7; // 요일 인덱스 값
    answer = week[d]; // 요일 찾기
    return answer;
}

(https://mylittletechdiary.tistory.com/entry/JavaScript-Lv1-2016%EB%85%84)

profile
technology blog

0개의 댓글