推薦新身分(2021 KAKAO BLIND RECRUITMENT)


🔗 質問リンク


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

問題の説明


KACAに加入した新規開発者NEOは「KACAアカウント開発グループ」に割り当てられ、KACAサービスに加入したユーザのID生成を担当する.「ニオ」の最初のタスクは,新たに加入したユーザがKakao IDルールに合わないIDを入力する際に,入力したIDのようにルールに合ったIDを推薦できるようにするプログラムを開発することである.
次はKakao IDのルール

  • IDの長さは3文字または15文字を超えてはいけません.

  • IDは小文字、数字、マイナス(-)、アンダースコア()、ピリオド(.)文字のみ使用できます.

  • しかし、句号(.)先頭と末尾では使用できませんし、連続して使用することもできません.
  • 「ニオ」は、次の7つのステップの連続処理により、新規ユーザが入力したIDがKACO IDルールに適合しているかどうかを確認し、ルールに適合していない場合は、ルールに適合している新規IDを推奨する.
    新しいプレイヤーが入力したIDがnew idであれば、

  • 手順1:new idのすべての大文字を対応する小文字に変換します.

  • 手順2:newidの小文字、数字、マイナス記号(-)、下線()および句点(.)以外のすべての文字を削除します.

  • 手順3:new idのピリオド(.)1つのポイント(.)に置き換えます.

  • ステップ4:new idのピリオド(.)先頭または末尾にある場合は削除します.

  • 手順5:new idが空の文字列の場合、「a」をnew idに置き換えます.

  • ステップ6:new idの長さが16文字より大きい場合、new idの最初の15文字以外のすべての他の文字を削除します.削除後のピリオド(.)new idの末尾にある場合、終了記号(.)テキストを削除します.

  • ステップ7:new idの長さが2文字未満の場合、new idの長さが3になるまで、new idの最後の文字を最後に繰り返し貼り付けます.
  • 新規プレイヤーが入力したnew idにパラメータが付与された場合、solution関数を完了し、「ニオ」が設計した7段階の処理手順後の推奨IDを返してください.

    ⚠▼制限


  • new idは、長さが1または1000未満の文字列です.

  • 新idは、アルファベットの大文字、アルファベットの小文字、数字、特殊な文字から構成されています.

  • newidに現れる可能性のある特殊文字は-.~!@#$%^&*()=+[{]}:?,<>/のみ.
  • 💡 プール(言語:JavaとPython)


    Java
    私が本当に熟練していない部分は正規式です.今回やった時は何かを学んだようです.これからもっと練習すれば慣れるはずです.
    class Solution {
        public String solution(String new_id) {
            // step 1
            new_id = new_id.toLowerCase();
            // step 2
            new_id = new_id.replaceAll("[^a-z0-9._-]", "");
            // step 3
            new_id = new_id.replaceAll("[.]{2,}", ".");
            // step 4
            new_id = new_id.replaceAll("^[.]|[.]$", "");
            // step 5
            if (new_id.length() == 0)
                new_id = "a";
            // step 6
            if (new_id.length() >= 16)
                new_id = new_id.substring(0, 15).replaceAll("[.]$", "");
            // step 7
            if (new_id.length() <= 2) {
                while (new_id.length() < 3)
                    new_id += new_id.charAt(new_id.length()-1);
            }
            return new_id;
        }
    }
    Python
    これは、複数の文字列を1つの問題に処理できる少し簡単ですが、良い問題です.
    joinを使用して文字列に特定の文字のみが含まれている文字列を抽出し、replaceを使用して特定の文字を置き換えます.
    また、文字列は文字を変更することはできません.斜線などに変更し、新しい変数に割り当てる必要があります.
    それを学んだ.
    import string
    
    def solution(new_id):
        characters = string.ascii_lowercase + string.digits + "-" + "_" + "."
        # 1단계
        new_id = new_id.lower()
        # 2단계
        new_id = ''.join(x for x in new_id if x in characters)
        # 3단계
        while new_id.count("..") != 0:
            new_id = new_id.replace("..", ".")
        # 4단계
        if new_id[0] == "." and new_id[-1] == ".":
            new_id = new_id[1:len(new_id)-1]
        elif new_id[0] == ".":
            new_id = new_id[1:]
        elif new_id[-1] == ".":
            new_id = new_id[:len(new_id)-1]
        # 5단계
        if len(new_id) == 0:
            new_id = "a"
        # 6단계
        if len(new_id) >= 16:
            new_id = new_id[:15]
            if new_id[-1] == ".":
                new_id = new_id[:len(new_id)-1]
        # 7단계
        elif len(new_id) <= 2:
            while len(new_id) != 3:
                new_id += new_id[-1]
        
        return new_id