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

728x90

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

 

2941번: 크로아티아 알파벳

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

www.acmicpc.net

난이도 : 실버5

분류 : 구현, 문자열


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

입력받은 문자열의 개수를 세어 출력하되, 위의 문자들은 하나로 셈해야 한다.

 

풀이 1

word = input()
cnt = 0
cro = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
for i in range(len(cro)):
    if cro[i] in word:
        cnt += word.count(cro[i]) 
        word = word.replace(cro[i], ' ')
word = word.replace(' ', '')
print(cnt+len(word))

cro리스트 내의 원소들은 2개 이상의 문자로 이루어져 있지만

하나의 문자로 인식되어야 한다.

replace함수를 사용해 해당 문자들을 공백처리하면서 cnt에 없앤 문자의 개수를 더해주었다.

 

문자열.replace(없앨 문자, 바꿀문자)

replace함수는 기존에 있는 문자를 새로운 문자로 변환시킨다.

 

ljes=njak 를 입력했다면 'lj' 's=' 'nj' 는 공백으로 처리되면서 cnt에 3을 더해준다.

(count()함수를 사용함으로써 word내에 크로아티아 문자의 개수를 정확하게 판별할 수 있다.)

따라서 word= e  ak 가 남는다.

 

word = word.replace(' ', '')은 word의 공백을 ''으로 바꾸어준다.

len()함수를 사용하여 나머지 글자들의 개수를 세어주기 위함이다.

따라서 word=eak가 되므로 print(cnt+len(word)) = 6이 될 것이다.

 


풀이 2

그냥 처음부터 2~3글자로 이루어진 알파벳들을 알파벳이 아닌 하나의 글자로 변환을 해주면 훨씬 간결하게 코드를 짤 수 있었다.

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

for i in cro :
    word = word.replace(i, '@') 
print(len(word))

ljes=njak 를 입력했다면 word = *e**ak가 되므로 그냥 여기서 len()함수를 써도 값이 나온다.

 

 

*replace()함수는 문자열의 원형을 바꾸지는 않는다.

word = 'wowowise'
word.replace('wise', 'man')
print(word)

new_word = word.replace('wise', 'man')
print(new_word)
wowowise
wowoman

따라서 변수에 바인딩 해줘야 replace가 적용된 값을 확인할 수 있다.

728x90