Programming/Python

[백준/python3] 2941. 크로아티아 알파벳

728x90

📢 문제 설명


크로아티아 알파벳은 영어 알파벳('a' ~ 'z')을 포함하고 추가로 'c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='을 포함한다.


✏️ 코드 풀이


croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
for x in range(97, 123):
    croatia.append(chr(x))

s = input()

c = 0
for y in croatia:
    if y in s:
        c += s.count(y)
        s=s.replace(y, ".")
        #print(s)
print(c)
  1. 크로아티아 알파벳을 리스트로 저장한다.
    croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
    for x in range(97, 123):
        croatia.append(chr(x))​
     크로아티아 만의 특별한 알파벳을 먼저 리스트로 저장한 후, 영어 알파벳을 추가한다.
  2. 사용자가 입력한 문자열 중 크로아티아 알파벳가 몇 개 있는지 센다.
    for y in croatia:
        if y in s:
            c += s.count(y)
            s=s.replace(y, ".")​
     크로아티아의 알파벳에 대하여 차례로 (크로아티아 알파벳 -> 영어 알파벳 순) 사용자가 입력한 문자열 내에 존재하는지 검색하도록 했다. 이 때, 해당하는 알파벳이 존재하는 경우, count 함수를 통해 해당 문자열 내에 몇 번 그 값들이 나타나는지 확인 후 저장한다. 그리고 replace 함수를 통해 해당 알파벳에 대해 중복적으로 카운트하지 않도록 "." 등으로 변환한다.

성공!


개선된 풀이

풀이 상에서 매번 검색한 후 replace할 때마다 문자열을 출력하도록 했다.

 

이 문제를 풀 때 고려해야 했던 점은 두 개 이상의 문자가 연속되는 크로아티아 알파벳에 대한 처리였다. 이를 해결하기 위해 크로아티아 알파벳에 대해 우선적으로 확인하고 "."으로 replace하도록 했다. 

기존의 코드에서는 영어 알파벳에 대해서도 동일한 방식으로 하도록 했지만, 그렇게 할 필요가 없다!

 

croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
#for x in range(97, 123):
#    croatia.append(chr(x))

s = input()

c = 0
for y in croatia:
    if y in s:
        c += s.count(y)
        s=s.replace(y, ".")
        #print(s)
print(len(s))

SMALL