문제 설명
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.
크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
입력
첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.
단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.출력
입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
입출력
입력 출력 ljes=njak 6 ddz=z= 3 nljj 3
arr = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
a = input()
answer = 0
for e in arr:
while a.find(e)>-1 :
i = a.find(e)
a = a[:i]+' '+a[i+len(e):]
answer += 1
answer += len(a.replace(' ', ''))
print(answer)
크로아티아 알파벳이 여러번 있을 수 있으므로 while문을 선택했다.
1. 주어진 문자에서 크로아티아 알파벳을 발견하면 알파벳의 개수인 answer에 1을 더해준다.
2. 위에서 찾은 크로아티아 알파벳을 기준으로 나누고 공백을 포함하여 다시 합쳐준다.
2. 반복문이 끝나면 공백을 제외한 남은 문자의 길이를 더해 반환한다.
공백을 포함하는 이유는 찾은 크로아티아 알파벳을 기준으로 합쳤을 때 새로운 크로아티아 알파벳이 만들어질 수 있기 때문이다.
근데, 이렇게 정리하니 크로아티아 알파벳을 찾은 자리에 공백을 넣어 앞뒤를 합치는 것이 크로아티아 알파벳을 공백으로 교체하는 것과 같다는 생각이 들었다.
새로 고친 코드는 다음과 같다.
arr = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
a = input()
answer = 0
for e in arr:
while a.find(e)>-1 :
a = a.replace(e, ' ')
answer += len(a)
print(answer)
croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
word = input()
for i in croatia :
word = word.replace(i, '*') # input 변수와 동일한 이름의 변수
print(len(word))
내 수정한 코드와 같은 방식으로, 공백 대신 '*'로 바꾸어 길이를 계산했다.