[プログラマー[Javascript]132016年


問題の説明
2016年1月1日は金曜日です.2016年ab日は何曜日ですか?2つの数abを入力し、2016年ab日が曜日の関数であることを返し、solutionを完了します.日曜日の名前は日曜日から土曜日までです.
.たとえば、SUN,MON,TUE,WED,THU,FRI,SATa=5の場合は、5月24日が火曜日であるため、文字列b=24を返します.
せいげんじょうけん
  • 12016年は閏年です.
  • 12016年"TUE"a日は実在の日です.(13月26日または2月45日などの日付は提供しません)
  • I/O例
    abresult524"TUE"
    に答える
    function solution(a, b) {
        const arr = ['SUN','MON','TUE','WED','THU','FRI','SAT']
        let day = new Date(`2016.${a}.${b}`).getDay()
       
        return arr[day]
    }
    説明:
    曜日を含むb配列、arr)を生成します.getDay()で週のインデックス値を受け入れ、配列内の要素new Date(2016.${a}.${b}を指定します.
    しかし,アルゴリズムの問題を解決する際に重要な計算がすべてreturnで行われるわけではないという提案もあり,他の解決策も探った.
    他人の解答
    function getDayName(a,b){
        var dayList = ['FRI','SAT','SUN','MON','TUE','WED','THU']; // 요일명 배열 (1월 1일은 금요일)
      var monthArr = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // 각 월의 길이 배열
      var daySum;
      if(a < 2) {
        daySum = b - 1;  // 1월일 경우 바로 인덱스 번호에 맞게 1만 빼준다.
      } else {
        daySum = monthArr.slice(0, a - 1).reduce((a, b) => a + b) + b - 1;
      } // 1월 이상일 경우 slice로 MonthArr를 잘라 모두 더해 1일부터의 일 수를 구한다.
        return dayList[daySum % 7]; // 7로 나누어 요일명을 리턴
    }
    どちらの方法も知っていればよかったのに.