본문 바로가기
👩🏻‍💻 Front-end/👾 Algorithm

백준 2941 - 크로아티아 알파벳 (Python)

by su-no 2022. 5. 3.

문제

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

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

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

입력

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

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

출력

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

풀이

word = input()

c = ['c=', 'c-', 'd-', 'lj', 'nj', 's=', 'z=']
c2 = 'dz='

num = len(word)
count = 0

for i in range(len(word)-1):
    new_word = word[i]+word[i+1]
    
    # 단어를 두글자씩 조합했을 때, 크로아티아 알파벳이면 전체 알파벳 수를 -1씩 감소
    if new_word in c:
        num -= 1
        
        # 'z='가 포함될 경우, 'dz='가 만들어지는지 확인 후 -1 감소
        if i > 0 and word[i-1]+new_word == c2:
            num -= 1

print(num)

생각

처음부터 데이터를 중복처리하지 않도록 깔끔한 코드를 작성하기는 어렵다.

근데 웃긴게 블로그 쓰려고 정리하는 과정에서 '어 이거 하나로 합칠 수 있네?' 생각이 번뜩 들어 수정한 적이 한두번이 아니다.

내가 작성한 코드를 다시보는 연습을 해야겠다.

 

사담을 해보자면.. 오늘은 술마시고 헤롱헤롱한 상태로 집에 들어왔는데, 그와중에 알고리즘 공부는 해야겠어서 책상에 앉았다.

할까말까할까말까 하루종일 고민하던 일도 일단 해버리고 나면 아무것도 아니게 된다. 코딩공부도 나에게는 그런 것 같다.

 

내년 이맘쯤의 나는 어디서 뭘 하고 있으려나..

걱정이 아니라 기대가 된다는게 다행이다.