プログラマー|Lv.2練習問題Part.3_JS


難易度:Level.2
言語:Javascript
出題履歴:練習問題

フルプールコード 👈🏻 クリックしてGithubに移動


❓ Question 1


畑を掘る
  • 縄張りゲームの最高の点数は?
  • 📝 My Solution 1

    function solution(land) {
        let result =  Math.max(...land[0])
        let standard = land[0].indexOf(result)
            for (let i = 1; i<land.length; i++) {
                land[i][standard] = 0;
                let nextNum = Math.max(...land[i])
                result = result + nextNum;
                standard = land[i].indexOf(nextNum)
            }
        return result;
    }
    既存のコードはテストの問題を解決しました.
    コミットされたコードに不一致が発生しました.
    これは、重複する値があるローのためです.
    だからコードを修正しました.
    function solution(land) {
        for (let i = 1; i<land.length; i++) {
            land[i][0] += Math.max(land[i-1][1],land[i-1][2],land[i-1][3])
            land[i][1] += Math.max(land[i-1][0],land[i-1][2],land[i-1][3])
            land[i][2] += Math.max(land[i-1][0],land[i-1][1],land[i-1][3])
            land[i][3] += Math.max(land[i-1][0],land[i-1][1],land[i-1][2])
        }
        const result = land[land.length-1].sort((a,b) => a-b)
        return result[result.length-1]
    }
    重複インデックスの値を追加できません.
    インデックス以外の最大値を次の配列値に追加します.
    最後の配列の最大値を結果値とします.

    結果



    ❓ Question 2


    右かっこ
  • 文字列に正しいかっこが含まれているかどうかを確認します.

    📝 My Solution 2


    既存のコード
    既存のアルゴリズム問題に類似の問題がある.replaceを使用して問題を解決しました.
    精度的には正しいが,効率的には通らなかったので,他の方法を選択した.
    function solution(s) { 
        const arr = s.split(""); 
        let t = 0; 
            for (let i=0; i<arr.length; i++) { 
                if (arr[i] == "(") {
                    t++; 
                } else { 
                    t--; 
                } 
                if (t < 0) { 
                    break; 
                } 
            } 
        return t == 0 ? true : false; 
    }
    まず、指定した文字列を配列に設定します.
    0の場合、カッコが正しいと判断する重複文が作成されます.
    このとき、開始文字が終了すると開始文字が閉じられます.
    すなわち、出力falseが構成される.

    結果



    ❓ Question 3


    次の大きな数字
  • ある数字をバイナリに変更すると、同じ数字を持つ次の大きな数字
  • が検索される.

    📝 My Solution 3

    const checkNum = (num) => {
        const ones = num.toString(2).split('').filter(data => data === "1")
        return ones.length
    }
    まず、バイナリに変更する部分では、
    関数を作成します.
    function solution(n) {
        let standard = checkNum(n)
            for (let i = n+1; i < n**2; i++) {
                if (standard === checkNum(i)) {
                    return i;
                    break;
                }
            }
    }
    次に、標準として変数を作成します.
    繰り返し文を使用して、条件に一致する数値をエクスポートします.

    結果



    参考になる文章

  • 畑を掘る
  • 右かっこ