プログラマ-圧縮



質問する


2018 KACAブラインド採用コードテストでの質問です.
辞書は、すべての長さ1の単語
  • を含むように初期化される.
  • 辞書で現在の入力と一致する最長文字列wを検索する.
  • wに対応する辞書のインデックス番号を出力し、入力からwを削除する.
  • 入力に未処理の次の文字がある場合は、辞書に(c)、w+c対応の単語を登録する.
  • フェーズ2に戻ります.
  • これは、上記の条件を満たすだけで実現できる問題であり、入力された最初の文字と一致する文字列の中で、最も長い文字列を検索するのに時間がかかる.

    コード#コード#

    def solution(msg):
        mark = {"A": 1, "B": 2, "C": 3, "D": 4, "E": 5, "F": 6, "G": 7, "H": 8, "I": 9, "J": 10, "K": 11, "L": 12, "M": 13,
                "N": 14, "O": 15, "P": 16, "Q": 17, "R": 18, "S": 19, "T": 20, "U": 21, "V": 22, "W": 23, "X": 24, "Y": 25,
                "Z": 26}
        answer = list()
        w, c = 0, 0
        while True:
            if c == len(msg):
                answer.append(mark[msg[w:c]])
                break
            elif msg[w:c+1] in mark:
                c += 1
            else:
                answer.append(mark[msg[w:c]])
                mark[msg[w:c+1]] = len(mark)+1
                w = c
    
        return answer
    markという名前のdickshernaryでは、msg[w:c++1]が存在しないまでcを1つずつ増やし、存在しなければdickshernaryに再追加することでこの問題を解決し、markを初期化する過程でc言語のように書くとは思わなかったので、pythonでもアスキーコードを書くとは思わなかった.
        mark = dict()
        for i in range(0,26):
            mark[chr(65+i)] = i+1
    これで簡単に初期化できます.

    解いてから。


    プログラマレベル2はページ上の順で解答していて、kakaoに出てくる問題自体は解答できますが、コードを作ると論理があまり正確ではないので解答しにくいです.論理をより細かく組織し、作成しなければならない.