[프로그래머스] Lv1. 2016년

Ash·2021년 3월 6일
0

알고리즘

목록 보기
4/10

💻 문제

문제설명

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

입출력 예

👆풀이방법

2가지 답을 제출하였는데
첫번째 방법으로는 javascript의 Date객체를 사용하였고 (내고나서 나랑 같은 답안이 있길래 댓글을 보았는데 알고리즘에 누가 내장객체를 사용하냐고 뭐라하는 것을 보았다... 사용하지 않는 것이 좋을듯🙄)
두번째 방법은 알고리즘적(?)으로 풀었다.
1월 1일 ~ a월 b일까지의 차이를 7로 나누고 나머지를 요일로 계산하는 방식을 생각했다.
우선, 요일 String을 반환하는 array와 매달의 날짜를 반환하는 array(dayStr)를 생성하였다.
(1월 1일이 "FRI" 로 시작하므로 요일 array를 "FRI" 부터 시작하도록 생성했다.)
1일부터 b일간 날짜차이는 b-1일이므로 daySum=b-1; 로 시작변수를 생성하고
1월 ~ a월까지의 달에 해당되는 day의 합은 for문을 사용하였다.
마지막에 daySum을 7로 나눈 후 나머지에 해당하는 숫자를 dayStr배열에서 찾으면 요일을 찾을 수 있다.

답안

성공 case

// 1. Date 객체 사용
function solution(a, b) {
    const dayStr = ["SUN","MON","TUE","WED","THU","FRI","SAT"];
    return dayStr[new Date('2016', a-1, b).getDay()];
}

// 2. 날짜 계산 방법
function solution(a, b) {
    let dayStr = ["FRI","SAT","SUN","MON","TUE","WED","THU"];
    let dayOfMonth = [31,29,31,30,31,30,31,31,30,31,30,31];
    let daySum = b-1;

    for(let i=1; i<a; i++) {
        daySum += dayOfMonth[i-1];
    }
    return dayStr[daySum%7];
}![](https://velog.velcdn.com/images%2Fyeoj1n%2Fpost%2F3c263011-d1da-4e32-b4a9-7389d0f050a7%2Fimage.png)
profile
기록남기기👩‍💻

0개의 댓글