c=, c-, dz=, ...가 한 묶음이니까 한 묶음씩 처리하면 좋겠지만 임의의 문자열을 한 묶음으로 처리하는 법은 모르겠고
처음에는 한 글자씩 따져보는 방법으로 접근했다.
import sys
word = list(sys.stdin.readline().rstrip())
ans = 0
for i in range(len(word)):
if word[i] == "c":
if word[i+1] == "=" or word[i+1] == "-":
continue
else:
ans += 1
elif word[i] == "=" or word[i] == "-":
ans += 1
elif word[i] == "d":
if word[i+1] == "z":
if word[i+2] == "=":
continue
else:
ans += 1
elif word[i+1] == "-":
continue
else:
ans += 1
elif word[i] == "z":
if word[i+1] == "=":
if word[i-1] == "d":
continue
else:
continue
else:
ans += 1
elif word[i] == "l":
if word[i+1] == "j":
continue
else:
ans += 1
elif word[i] == "n":
if word[i+1] == "j":
continue
else:
ans += 1
elif word[i] == "j":
ans += 1
elif word[i] == "s":
continue
else:
ans += 1
print(ans)
이렇게 하니 VSCode에서는 잘 돌아갔지만 백준에서는 Index Error가 발생했다.
반복문에서 함부로 i+1, i+2 인덱스에 접근하도록 한 것도 반성해야 한다..!
이후 인덱스를 초과하지 않고 한 글자씩 따져보는 방법을 고민해봤는데 잘 모르겠어서 정답을 찾아봤다.
croatian = ["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="]
word = input()
for c in croatian:
word = word.replace(c, "*")
print(len(word))
내겐 생소했던 replace 함수를 이용하니 한 글자씩이 아니라 한 묶음씩, 즉 문자열 단위로 인식할 수 있었다.
replace 함수는 특정 문자열을 바꿀 수 있는 함수로,
replace(바꿀 대상이 되는 문자열, 바꾼 결과가 되는 문자열)과 같이 사용한다.
위의 코드를 예시로 들어보면, ljes=njak가 *e**ak로 바뀔 것이다.
그리고 word.replace(c, "*")만으로 word가 변경되지 않기 때문에, 반드시 word = word.replace(c, "*")와 같이 작성해주어야 한다.