明日勉強キャンプD+42
6489 ワード
BAEKJOON NO.2941「クロアチア文字」
<質問>
入力した任意の文字列を次の表に対応するクロアチア語に変換し、文字列の長さを出力すればよい.(クロアチア文字はdžもしそうであれば、2の長さではなく1の長さで計算し、変換されていない文字は1の長さで計算します.)
<解答>
クロアチア文字を区別する.
[正規式]
p = re.compile('(d)?([a-z])([=j-])')
(d)? : 最初の文字列は「d」でもなくてもよい.
([a-z]):2番目の文字列がアルファベット小文字で構成されているかどうかを確認します.
([=j-]):3番目の文字列が「=」、「j」、「-」であるかどうかを確認します.
k = p.findall(word)
「word」変数に入力された文字列が正規表現(p:以上の条件)と一致していることを確認します.
対応する文字をkにリスト形式で格納します.(findall:正規式と組み合わせて、リストに戻ります.)
クロアチア文字が正しいかどうかを比較して計算します
[リスト(k)とクロアチア文字を比較する]
「dz=」があるかどうかを確認し、ある場合は「count+=2」を表示します.
クロアチア文字(c=、c-、d-、lj、nj、s=、z=)と比較して「count+=1」を行います.
合成コードの表示
import re
alphabet_list = ["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="]
word = input()
count = 0
p = re.compile('(d)?([a-z])([=j-])')
k = p.findall(word)
for i in k:
print("i = ", i)
alphabet = i[0] + i[1] + i[2]
if alphabet == "dz=":
count += 2
print("조건1 = ", alphabet[1:2])
elif i[1] + i[2] in alphabet_list:
count += 1
print("조건2 = ", i[1] + i[2])
print(len(word) - count)
※問題解決後に他の解法を探すとより簡潔なコードが見つかりました.import re
print(len(re.sub("(dz=|c=|c-|d-|lj|nj|s=|z=)", "0", input())))
学んだ部分。
Reference
この問題について(明日勉強キャンプD+42), 我々は、より多くの情報をここで見つけました https://velog.io/@yu_jep/내일배움캠프-D42テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol