Programmers—[3]圧縮

6690 ワード

💻 [3]圧縮


に質問


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

勘定科目

function solution(msg) {
    msg = msg.split('');

    var answer = [];
    const dict = [];
    for (let i = 0; i < 26; i++) {
        dict[i] = String.fromCharCode([i + 65]);
    }

    for (var count = 0; count < msg.length; count++) {
        var currentEnter = msg[count];
        var nextEnter = msg[count + 1];

        while (dict.includes(currentEnter + nextEnter) && count < msg.length) {
            count++;
            currentEnter = currentEnter + nextEnter;
            nextEnter = msg[count + 1];
        }

        answer.push(dict.indexOf(currentEnter) + 1);
        dict.push(currentEnter + nextEnter);
    }

    return answer;
}



var msg = 'KAKAO';
console.log(solution(msg));

¥¥АААААААААА


問題はおかしい.最初に紹介した圧縮アルゴリズムを採用することはできませんが、後述の例の進行方法をよくチェックしてください.
例題の動作方式が一番重要です.
最初は問題の動作を忠実に表現しなければならない.
CurrentEnter、nextEnter、response、dict等
実装に必要な要素を作成し、これらの要素の変化を観察して実装します.

  • 最初のcurrentEnterとnextEnterはmsgの最初の要素と2番目の要素です.

  • currentEnter+nextEnterが事前に存在する場合、現在の要素は現在の要素+の後の要素です.
    (ここで例をよく見ると、どうせ次の要素は1文字しかありません.)

  • ここでcount++の原因はmsgが2つの格子を超えているからです.

  • nextEnterはcurrentEnterの次の要素なのでcurrentEnterはcountなので+1です.さっきcount++になりましたが、全部で2格を超えました.

  • countは文字列の長さを超えてはいけません.

  • currentEnter+nextEnterが辞書にない場合、
    現在の入力を追加し、事前に追加します.
  • 問題の例題を理解して体現すればよい.

    学識

  • javascriptには明確なdictionaryデータ型がないため、オブジェクトに属性を追加することで作成されます.近接方式は객체.속성であり,対応する属性がない場合は객체.속성 === undefinded形態である.