[백준] 2941번 크로아티아 알파벳 | 파이썬 Python

문제

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.

크로아티아 알파벳 변경
č c=
ć c-
dz=
đ d-
lj lj
nj nj
š s=
ž z=

예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.

 

입력

첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.

단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.

 

출력

입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

 

예제

 

나의 풀이

word = input()
alpha_list = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
cnt = 0

for i in alpha_list:
    split_list = word.split(i)
    if len(split_list) > 1:
        cnt += len(split_list) - 1
        word = ''.join(split_list)

    if word == '': 
        break

if word != '':
    cnt += len(word)

print(cnt)
  • `word`를 크로아티아 알파벳으로 `split()`한다.
  • `split_list`의 길이가 `1` 이상이라면 즉, 문자에 크로아티아 알파벳이 포함되어 있었다면 그 수만큼 `cnt`에 더해준다.
  • 카운트한 알파벳을 제외한 새로운 `''.join(split_list)`를 `word`에 할당한다.
  • 만약 카운트할 단어가 남아있지 않다면 for문을 종료한다.
  • if문에서 크로아티아 알파벳을 제외한 알파벳이 남았다면 그 `word`의 길이만큼 `cnt`에 더한다.
  • 테스트 결과 이 풀이는 틀렸다. 예제 3번에서 `nljj`를 입력하면 중간에 `lj`가 삭제되고 남은 글자가 `nj`로 합쳐지면서 `nj`를 또다른 크로아티아 알파벳으로 인식해서 `2`를 출력한다.

 

 

다른 사람의 풀이

word = input()
alpha_list = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']

for i in alpha_list:
    word = word.replace(i, '*')

print(len(word))
  • `replace`를 이용해서 크로아티아 알파벳이 있을 경우 알파벳에 사용되지 않는 글자인 `*`로 바꾼다.
  • 최종적으로 `word`의 길이를 출력한다.