[javascript-algorithm]プログラマー-2016年


(1)問題リンク


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

(2)解答と解説1


-問題を解く

        let a = 5;
        let b = 24;

        function solution1(a,b){
            const date = new Date(2016, (a - 1), b);

            return date.toString().slice(0, 3).toUpperCase();
        }

        console.log(solution1(a, b)) // "TUE"

-問題の説明

  • Date()ジェネレータを使用して日付を取得します.今月は0から11なので-1
  • toString()メソッドを使用して、日付の文字列を決定します.(TUE May 24201600:00 GMT+0900(韓国時間)
  • を抽出するために,slice()メソッドを用いて0文字目から3文字目まで.
  • toUpperCase()メソッドを使用して大文字に変換します.
  • (2)問題解きと説明2


    -問題を解く

            let a = 5;
            let b = 24;
    
            function solution2(a,b){
                const arr = ['SUN','MON','TUE','WED','THU','FRI','SAT'];
                const date = new Date(`2016-${a}-${b}`);
                const day = date.getDay()
    
                return arr[day];
            }
    
            console.log(solution2(a, b)) // "TUE"

    -問題の説明

  • arr変数を生成し、日曜日から土曜日まで並べます.ただし、getDayの順番と一致するように、日曜日から順番を入れます.
  • date変数でDate()ジェネレータを使用して日付を取得します.このとき、「0,000-0-0」の形式で記述され、ベクトルを使用して文字列と変数を組み合わせます.
  • day変数では、曜日を0から6に戻すgetDay()メソッドを使用して日付のインデックスを取得します.
  • を一週間にわたって配列arrに割り当て、指定された日付の曜日インデックスの変数dayをインデックスとして出力します.
  • (2)問題解きと解説3


    -問題を解く

            let a = 5;
            let b = 24;
    
            function solution3(a,b){
                var dayList = ['FRI','SAT','SUN','MON','TUE','WED','THU'];
                var monthArr = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
                var daySum;
    
                if(a < 2) {
                    daySum = b - 1;
                }else{
                    daySum = monthArr.slice(0, a - 1).reduce((a, b) => a + b) + b - 1;
                }
    
                return dayList[daySum % 7];
            }
    
            console.log(solution3(a, b)) // "TUE"

    -問題の説明

  • 日のリストで曜日を変数とします.でも2016年1月1日は金曜日なので、金曜日から詰めます.
  • montharrには、毎月の最後の日付が含まれています.違う考えは週を含む数です.
  • 日の合計を加算した空の変数daySumを生成します.
  • ifゲートで条件式を作成します.最終演算方式は、「a月より前のすべての月の日付+bの日付」です.1月であればmontharrから抽出され、付加価値がないため、別途条件を作って削除します.曜日インデックスは0から始まるので、-1をあげます.
  • 1月でない場合、slice()メソッドaに対応する月の前のすべての月の日付が抽出されます.aが5であれば5−1であり、それをindex 0,4にスライスし、1~4月の日付を抽出する.([31, 29, 31, 30])
  • 各要素は、
  • reduce()メソッドによって1つの値に追加されます.(121)
  • を1つの値とし、bを加えた1日.その後の曜日インデックスは0から始まるので、-1をあげます.(144)
  • 日割り当てられたdayList変数に、daySum%7としてindexを指定し、残りのindexを抽出して曜日を返します.
  • (3)参考資料

  • Date()作成者
  • Date.prototype.getDay()
  • 割り込みプログラムとコンパイラ