Home [Python] 백준 2941번 : 크로아티아 알파벳
Post
Cancel

[Python] 백준 2941번 : 크로아티아 알파벳

Problem

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

Solution

code1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from string import ascii_lowercase

# 길이가 2인 알파벳 -> 1인 알파벳 순서로 저장
croatian_alpha = ['c=','c-','dz=','d-','lj','nj','s=','z='] + list(ascii_lowercase)

word = input()
res=0

for i in croatian_alpha:
    if i in word:
        res += (word.count(i)) # 입력된 단어에서 알파벳 카운팅
        word = word.replace(i,'.') # 카운팅 마친 뒤 해당 알파벳을 '.'으로 변경

print(res)

code2

1
2
3
4
5
6
7
croatian_alpha = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']

word = input()
for t in croatian_alpha:
    word = word.replace(t, '.')
    
print(len(word))

Memo

이 문제를 해결하기 위해 리스트를 활용하였다. 리스트에는 길이가 2인 알파벳 부터 1인 알파벳 순으로 저장하였는데 그렇지 않으면 c나 d등의 일반 알파벳이 중복카운팅될 수 있기 때문이다. 처음에는 카운팅을 마친 알파벳을 strip 함수를 통해 제거했는데 끝부분만 제거가 되었다. strip함수는 왼쪽과 오른쪽 끝부분에만 적용되는 함수이기 때문이다.

따라서 replace함수를 replace(i,'') 형태로 사용하였는데 이번에 발생한 문제는 nljj가 테스트케이스로 입력되었을 경우에 결과가 3이 아닌 2가 출력되는 것이었다. 확인해보니 처음 lj를 카운트한 뒤에 제거하게 되면 nj가 남게되어 다음번 카운트때 길이가 2인 nj로 인식되어 한개로 카운트가 되어 발생한 문제였다. 이를 해결하기 위해 공백으로 바꾸는 대신 알파벳이 아닌 다른 문자로 바꾸어주었다.

code2는 다른 블로거의 풀이를 보다가 알게 된 방법인데 일반 알파벳은 따로 세지 않고 바꿔준 word 문자열의 길이를 세어서 확인하는 방법이다. 개수만 세면 되는 문제이기 때문이다.

Ref.

https://hongku.tistory.com/255

This post is licensed under CC BY 4.0 by the author.

[Python] 백준 5622번 : 다이얼

[Python] 백준 1361번 : 그룹 단어 체커