プログラマー|2018 KAKAO[3回目]COTE JS


難易度:Level.2
言語:Javascript
出題履歴:2018 KAKAO BLIND RECRUITMENT

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


❓ Question 1


n進ゲーム
  • 私が言いたい数字
  • を出力します.

    📝 My Solution 1

    function solution(n, t, m, p) {
        let answer = '';
        let nums = '';
            for (let i = 0; i<=t*m; i++) {
                nums += i.toString(n)
                if (nums.length < t*m) {
                    continue;
                } else if (nums.length >= t*m) {
                    break;
                }
            }
    まず、ゼロから始まる数をn進数に変換します.
    変換後に合成された文字が数字の個数と参加者の積の長さより大きい場合.
    文の繰り返しを停止します.
            for (let i = p-1; i<t*m; i++) {
                if (i % m === p-1) {
                    answer += nums[i]
                }
            }
        return answer.toUpperCase();
    }
    そして、自分の順番で該当する文字列を抽出して答えを出す.

    結果



    ❓ Question 2


    あっしゅく
  • の入力文字列を予め記録する圧縮技術
  • を実現する.

    📝 My Solution 2

    function solution(msg) {
        let answer = [];
        let result = [];
        let msgArr = msg.split('')
        const dic = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N',
                     'O','P','Q','R','S','T','U','V','W','X','Y','Z'];
             
             for (let i = 0; i<msgArr.length; i++) {
                 if (dic.indexOf(msgArr[i]+msgArr[i+1]) === -1) {
                     result.push(msgArr[i]);
                     dic.push(msgArr[i]+msgArr[i+1]);
                 } else {
                     let newStr = msgArr[i]+msgArr[i+1];
                     msgArr[i+1] = newStr;
                 }
             }
    まず、入力した文字列を配列に分けます.
    辞書に対応する配列を作成します.
    そして、組み合わせた字が辞書に入っていなければ、辞書に入れます.
    前の文字を結果配列に挿入します.
    ある場合は、コンビネーションの2番目の文字をコンビネーションの文字に変更できます.
            for (let i = 0; i<result.length; i++) {
                answer.push(dic.indexOf(result[i])+1)
            }
        return answer;
    }
    辞書インデックスで結果を見つけ、インデックス+1を追加します.
    値をエクスポートします.

    結果