입력된 임의의 문자열을 아래 표에 해당되는 크로아티아 단어로 변환한 뒤 문자열의 길이를 출력해 주면 된다. (크로아티아 문자가 dž로 되었으면 2의 길이가 아닌 1의 길이로 계산하고, 변환하지 않은 문자는 1의 길이로 계산해 주면 된다.)
크로아티아 알파벳 구분하기.
[ 정규식 ]
p = re.compile('(d)?([a-z])([=j-])')
(d)? : 첫번째 문자열이 "d"여도 되고 아니어도 된다.
([a-z]) : 두번째 문자열이 알파벳 소문자로 이루어져 있나 확인한다.
([=j-]) : 세번째 문자열이 "=","j","-" 인지 확인한다.
k = p.findall(word)
"word"변수에 들어오는 문자열을 정규식(p : 위 조건)과 매치되는지 확인한 뒤
해당되는 문자를 k에 리스트 형식으로 저장된다.( findall : 정규식과 매치하여 리스트로 돌려준다.)
크로아티아 알파벳이 맞는지 비교 후 계산
[ 리스트(k)를 크로아티아 문자와 비교해 준다. ]
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())))