[알고리즘] 프로그래머스 - 2016년

do_large·2021년 1월 8일
0

알고리즘

목록 보기
32/50
post-thumbnail

https://programmers.co.kr/learn/courses/30/lessons/12901

문제설명
2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요?
두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수,
solution을 완성하세요.
요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT

제한조건

  • 2016년은 윤년입니다.
  • 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)

입출력 예

나의 풀이방법

function solution(a, b) {
    const days = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
    //각 달이 며칠까지 있는지 담는 배열
    const months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30 ,31];
    
 	// 1월 1일이 금요일이었기때문에 days배열의 5번째 인덱스부터 시작한다
    let startDayIdx = 5;
    
    // 입력된 날짜까지의 일수를 담는 변수
    let countDays = 0;
  
    // for문의 제한조건을 a-1라고 준 이유는 a달의 이전 달 까지의 모든일수를 더해야하기 때문이다. a달의 일수를 더해버리면 안된다!! 
    for(let i = 0; i < a-1;i++){
        countDays += months[i];
    }
    countDays += b;
    
    return days[((countDays % 7)+startDayIdx-1)%7]
}

내가 푼것처럼 직접 구현해서 풀어도 되지만 JS에서 제공하는 Date를 사용해서 더 간단하게 풀수도 있다.

function getDayName(a,b){
  	let date = new Date(2016, (a - 1), b);
    return date.toString().slice(0, 3).toUpperCase();
}

ㅎㅎ....정말 간단하구먼

Date

  • Date를 생성할때

    new Date(year, monthIndex[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);
    위의 형식에 맞게 설정하고 싶은 값을 넣어주면 된다.
    여기서 주의할게 monthIndex 값인데, 0은 1월을 나타내고 11은 12월을 나타낸다는것을 기억하기!!!!

    위의 생성자함수를 실행하면 아래와 같은 결과가 나온다.
    Thu May 26 2016 00:00:00 GMT+0900 (대한민국 표준시) {}

    그래서 이러한 결과물을 문자열로 만들고 앞의 3글자를 뽑아내어 대문자로 출력하면 된다.

0개의 댓글