[Programmer-021 KAKAO BLIND RECRUITMENT#1]新しいアイデアをお勧め


2021年から雄大なVELOG-、!
下半期から始めることにしました!ふふ(とにかく)
私はドキュメント化が好きで、主に私が閲覧しやすい形式でwordで書かれています.
再度VELOGにアクセスした理由は、後で公開された場所で知識を共有するため、それを記録することにしたからです!
第1篇文章は2021 KACA新入国債第1回オンラインコードテスト問題です!
これらの問題はKaKao Techのブログとプログラマーに現れた.
リンク👉 2021ココア新公債第1回オンラインコードテスト技術開発者問題解説

問題を解く構想.



1つ目の質問新しいIDは一見「正規式」で解決すべきだと思います.特に2-3ステップを解く過程で.
パイソンの正規式関連書類はジャンプ開始ダブルPython 07-2正規表現を見て、よく整理されています.

考えを具体化する


こう書いて、こう読む。


これらの問題では
new idに現れる可能性のある特殊文字は-.~!@#$%^&*()=+[{]}:?,<>/のみ.
宣言したが、ステップ2で説明した小文字、数字、マイナス記号(-)、下線()、句点(.)除外したい.
正規表現から除外するには、文字クラスで^を使用する必要がありますが、問題はorがあり、ありません.
p = re.compile('[\W|^\-|^\.]')
上記のように、小文字(含む)ではなく、マイナス記号ではなく、句点ではなく、正規の形式で表されます.
>>> p.findall("...!@BaT#*..y.abcdefghijklm")
['.', '.', '.', '!', '@', '#', '*', '.', '.', '.']
あるいは...呜呜...以下にもコンパイルしました.
p = re.compile('[^\w|^\-|^\.]') 
>>> p.findall("...!@BaT#*..y.abcdefghijklm")
['!', '@', '#', '*']
前者は.フィルタできません、^フィルタできます...後者.フィルタリング

あと正規式を使うときに少し迷う部分があると。

  • .使用するには[.]書くべきだと思うので、文字クラスでも[.]書こうと思ったんだけどね(^.)こうして(^.)はい.
  • ハイフンは文字クラスにも~の概念(from-to)があるので、ハイフン以外は難しいですがescapeシーケンスも使えます.
  • 結局一つずつ取り除くことにしましたが、ははは…!与えられた特殊文字のうち、escapeシーケンスを必要とする文字は、意外にも^と]のみである.

    合成コード

    import re
    def solution(new_id):
        #1단계
        answer = new_id.lower()
        #2단계
        p = re.compile('[~|!|@|#|$|%|\^|&|*|(|)|=|+|[|{|\]|}|:|?|,|<|>|/]')
        answer = p.sub('', answer)
        #3단계
        p = re.compile('[.]{2,}')
        answer = p.sub('.', answer)
        #4단계
        p = re.compile('^[.]|[.]$')
        answer = p.sub('', answer)
        #5단계
        if answer == '' : answer ="a"
        #6단계
        answer = answer[:15]
        answer = p.sub('', answer)
        #7단계
        if len(answer) < 3:
            while(len(answer)<3): answer+=answer[-1]
        return answer
    上記のコードを書きましたが、reのドキュメントについてを読みました.
    p=~とp.subで、reではありません.sub(pattern,repl,string,count=0,flags=0)もこのように書くことができます.

    結論/感受

  • もし私が本当にコードテストに参加していたら、どうせ正確なウォーミングアップの第1題だけを考えて早く終わったほうがいいです.
  • 題を終えて、他の人の解答を見ました.
    うろうろして、、、2階の正規式の部分はこのように書けばいいです、
  • re.sub('[^a-z0-9\-_.]', '', st)
    あ、問題は最初findallではなくmatchで正規式を確認したことです.orどうしたの...どうしたんですか.私は.バカ…!