1 minute read

크로아티아 알파벳

ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.

Input-1)
ljes=njak
Output-1)
6

Input-2)
ddz=z=
Output-2)
3


최초 접근 방식

  1. 내 입력에 크로아티아 알파벳(이하 alph)이 포함되어 있는지 확인한다.
  2. 포함되어 있으면 점수를 1개 증가시키고 내 입력 문자열에서 해당 alph를 공백값으로 치환한다.
  3. 1번 검증이 완료되고 남은 입력 문자열에서 공백을 없앤 후 갯수를 점수에 증가시킨다.


문제 해결

위와 같이 구현하니, dz=dz=, ljlj 등과 같이 연속으로 alph에 포함된 문자열이 주어졌을 때 한꺼번에 처리하는 문제가 발생하였다.

1
2
3
4
5
6
for i in cro_alph:
    if n.find(i) != -1:
        n = n.replace(i, ' ')
        cnt += 1
n = n.replace(' ', '')
cnt += len(n)

그렇다면 아예 문자열을 치환할 때 공백값이 아닌 문자로 치환한 다음, 치환한 문자와 남은 문자의 갯수를 함께 세면 어떨까? 라는 방식으로 문제 해결을 시도했다.

문제 해결을 위한 접근 방식 수정

  1. 내 입력 문자열에 크로아티아 알파벳(이하 alph)이 포함되어 있는지 확인한다.
  2. 포함되어 있으면 점수를 1개 증가시키고 내 입력 문자열에서 해당 alph를 ‘*‘으로 치환한다.
  3. 1번 검증이 완료되고 입력 문자열에서 ‘*‘의 갯수를 점수에 증가시킨다.
  4. 이후 입력 문자열에서 ‘*‘을 제거하여 alph에 포함되지 않은 문자열 갯수를 점수에 증가시킨다.


1
2
3
4
5
6
7
8
9
10
n = str(input())
cro_alph = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
cnt = 0
for i in cro_alph:
    if n.find(i) != -1:
        n = n.replace(i, '*')
cnt += n.count('*')
n = n.replace('*', '')
cnt += len(n)
print(cnt)