bravo my life!

[항해99][알고리즘] [JavaScript] 2016년 본문

Algorithm

[항해99][알고리즘] [JavaScript] 2016년

losajjang 2022. 3. 14. 14:04
728x90

문제 설명

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

입출력 예

a b result
5 24 "TUE"

solution.js

function solution(a, b) {
  var dayName = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']
  //요일의 배열을 만든다.
  var endOfMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  //각 월의 일수를 배열로 만든다.
  var day = b + 4;
  //2016년 1월 1일이 금요일이라는 예를 주었으니 기본저장값으로 +4를 해주었다.
  //1일인 경우 b = 1이므로 1 + 4는 5이다. 나중에 배열처리를 하면 5번째 배열일 것이다.
  for (let i = 0; i < a - 1; i++){
    day += endOfMonth[i]
    //반복문을 실행한다.
    //1월인 경우 a는 1인데 해당월이 가산되지 않아야 하기때문데 조건에 -1을 해주었다.
    //endOfMonth의 i번째 배열을 변수 day에 더한다.
    //이 때 변수 day에는 d의 값이 1인 경우 1+4인 5가 미리 저장되어있는 상태에서
    //endOfMonth의 i번째 배열의 값이 더해진다. 위의 예에서는 5 + 0이니 합은 5이다.
  }
  return dayName[day%7];
  //일주일은 7일이므로 7을 나눈 나머지를 구하여  그 값을 배열로 두어 변수 dayName의 값을 구한다.
}
console.log(solution(1,1))

다른 풀이

function solution(a, b) {
 return new Date(2016, a-1, b).toString().slice(0,3).toUpperCase();
 //new키워드를 사용한 Date함수에 
 //문자열로 만들기위한 toString, 
 //필요한 부분을 추출하기 위한 slice,
 //해당 문자를 대문자로 만들기 위한 toUpperCase를 사용하여 return한다.
}
console.log(solution(1,1))

또 다른 풀이 

function solution(a, b) {
  var dayName = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']
  //요일의 배열을 만든다.
  var date = new Date(2016, a-1 , b);
  //new 키워드를 사용한 Date함수로 도출된 값을 변수 date에 저장한다.
  var theDay = date.getDay()
  //변수 date에 저장된 값에서 day값을 가져와 변수 theDay에 저장한다.
  return dayName[theDay]
 }
 console.log(solution(1,2))