TIL_93. プログラマJSコードテスト問題


JSコードテスト練習


2021. 11. 17(カウント)


質問する


最小数を削除


整数の配列を保存し、arrから最小数の配列を削除する関数を返します.解決策を完了してください.ただし、返される配列が空の配列の場合は、配列に-1を入力して返します.たとえばarrが[4,3,2,1]の場合は[4,3,2]を返し、[10]の場合は[1]を返します.
function solution(arr) {
    if (arr.length === 1) return [-1];
    
    arr.splice(arr.indexOf(Math.min(...arr)), 1);
    
    return arr;
};
spliceメソッドは修正されたと思っていたのですが、ずっとカットされていた部分が戻されていたのでしばらく悩んでいましたが、メソッドの結果を変数に割り当てたり、そのまま返したりすると、カットされた部分が保存されてしまいます.これは忘れた事実を思い出すことができる問題だ.

整数降順で配置


関数解は、パラメータ入力として整数nを受け入れる.nの各ビット数を大きいから小さい順に並べ替えてください.例えば、nが118372の場合、873211が返される.
function solution(n) {
    return parseInt(n.toString().split("").sort().reverse().join(""));
};

整数平方根の判別


任意の正の整数nについて、nがある正の整数xの二乗であるか否かを判断しようとする.
nが正の整数xの平方である場合、x+1の平方を返し、nが正の整数xの平方でない場合、-1を返す関数を完了する.
function solution(n) {
    return Number.isInteger(n ** 0.5) ? (n ** 0.5 + 1) ** 2 : -1;
};
n 0.5を整数に乗じた場合、整数であるか否かを判別した後、3つの演算子を用いて整数の場合の問題に要求される式を算出し、非整数の場合は−1の方法を用いる.

数値桁数の追加


自然数Nが与えられた場合,Nの各数の和を求め,返される解関数を求める.
たとえば、N=123の場合、1+2+3=6を返します.
function solution(n) {
    return n > 10 ? n.toString().split("").reduce((prev, curr) => parseInt(prev) + parseInt(curr)) : n
};
最初は3つの演算子がなく、メソッドフィルタ部分のみが返され、テスト結果に問題がありました.
失敗したnの値を指定することはできませんが、nの値が1つの位置に付与されたかどうかを考慮して失敗したため、nが10未満になるように3つの演算子を追加し、nに再パッケージしてテストに合格しました.
function solution(n) {
    let sum = 0;
    while (n > 0) {
        sum += parseInt(n % 10);
        n = parseInt(n / 10);
    };
    return sum;
};
文字列を使用しない論理も記述されています.1桁の状況をチェックする必要はありません.

自然数配列の反転


自然数nを逆さまにして、各数字を要素の配列で返します.例えば、nが12345の場合、[5,4,3,2,1]が返される.
function solution(n) {
    return n.toString().split("").map(el => parseInt(el)).reverse();
};
文字列を使用しない論理も記述されています.
function solution(n) {
    let arr = [];
    
    while (n > 0) {
        arr.push(parseInt(n % 10));
        n = parseInt(n / 10);
    };
    
    return arr;
};

奇妙な文字を作成


文字列sは、1つ以上の単語から構成される.各単語は1つ以上のスペース文字で区切られます.各単語の偶数の2番目のアルファベットは大文字で、奇数の2番目のアルファベットは小文字で置換された文字列を返す関数で、解決策を完了します.
function solution(s) {
    let arr = s.split(" ");
    let temp = "";
    
    arr.map((el, i) => {
        
        for (let j = 0; j < el.length; j++) {
            temp += (j%2 ? el[j].toLowerCase() : el[j].toUpperCase())
        };
        
        arr.splice(i, 1, temp);
        temp = "";
    });

    return arr.join(" ");
};
文字列を1文字ずつ中断して配列に保存し、インデックスに従って大文字と小文字に変換します.
変換した単語をtemp変数に入れ,配列の元の位置を上書きし,tempを初期化する.

薬水の和


整数nを受け入れ、nのすべての約数加算値を返す関数は、解を完了してください.
function solution(n) {
    let answer = n;
    
    for (let i = 1; i <= n/2; i++) {
        if (!(n%i)) answer += i;
    };
    
    return answer;
};
一つずつ全部代入するより効果的な方法はありませんか?1時間近く悩んでいましたが、どうせ代入はパソコンでやっているので、代入が一番速く、そんなに複雑ではないと思い、偽論理を使うことにしました.