우당탕탕 파이썬 with 하루하나 알고리즘

백준 2941 파이썬 - 크로아티아 문자 개수 세기!

hyxndy 2022. 4. 11. 11:54

백준 2941번 - 크로아티아 알파벳 with Python

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

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

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

 

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

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

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

 

https://www.acmicpc.net/problem/2941

 

2941번: 크로아티아 알파벳

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=

www.acmicpc.net

 


일단 처음 도전했던 틀린 코드부터 보겠다!

croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
word = input()
count = 0
for i in croatia:
    if (i in word):
        count += 1
        word = word.replace(i,' ')
for i in word:
    if (i != " "):
        count += 1
        
print(count)

처음엔 코드를 이렇게 짰다. croatia 리스트에 있는 단어들이 word에 존재하면 개수를 1 세주고, 그 문자를 공백으로 바꿔서 제거해주었다. 남아있는 알파벳 중 공백을 제외한 나머지 글자들을 세주었다.

 

하지만 이렇게 하니까 문제가 발생했다. 만약 같은 크로아티아 알파벳(ljlj, c=c=등)이 나온다면,

해당 문자들은 모두 지워지지만 개수를 한 개로만 세주었기 때문이다.


그래서 비슷한 맥락이지만 조금 다르게 바꾸어보았다. 이 코드는 구글링을 참고하여 만든 코드이다.

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

for i in croatia:
    word = word.replace(i, "*")
print(len(word))

방법은 비슷하다.

만약에 croatia에 있는 알파벳들이 word에 있으면, word에 있는 그 알파벳들을 *표시로 바꾸어주었다.

이 코드를 보고나서, 위에서 if문을 굳이 쓸 필요가 없다는 것을 알게 되었다. word안에 그 문자가 있을 때만 replace할 수 있기 때문이다. 위에서는 공백으로 대체해주고, 아래에서는 별(*)표시로 대체해주었는데, 이는 딱히 상관은 없다!

 

마지막으로 해당 문자의 길이를 세어주면 된다. 훨씬 더 간단하고 직관적인 것을 볼 수 있다.

 

비록 내 코드는 틀렸지만, 방향성은 비슷하게 접근해 나갔다는 점에서 발전된 느낌이고 기분이 좋아졌다.

이렇게 계속 성장해서 앞으로는 구글링 없이도 코드를 짤 수 있었으면 좋겠다!