본문 바로가기
🔖_Problem Solving/백준

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

by 쩡지 2022. 3. 16.
난이도 : 실버 Ⅴ
사용언어 : 파이썬
단계별 풀이 > 문자열

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=']
croatia_1 = ['c','d','l','n','s','z']

word = input()
cnt = 0
a = 0 

while a < len(word) : 
    if word[a] in croatia_1 :
        if word[a:a+2] in croatia :
            a += 2
            cnt += 1
        elif word[a:a+3] in croatia : 
            a += 3
            cnt += 1
        else : 
            a+=1
            cnt += 1
    else : 
        a+=1
        cnt += 1

print(cnt)

풀이방법 (이번 풀이는 비효율적인 아이디어입니다. 다른 답안을 참고하시는게 좋을 것 같네요^^)

 

1. 크로아티아 알파벳의 첫자리만 담은 croatia_1 리스트 생성

 

2. word[a:] 한 문자씩 읽어 croatia_1에 포함되면 확인하기

- 최초 a값은 0으로 지정

- 크로아티아 알파벳은 2글자 또는 3글자("dz=")이므로, word[a:a+2] 또는 word[a:a+3]이 croatia에 포함되는지 확인

- 크로아티아 알파벳이 맞다면 -> a += 2 or 3 으로 하여 알파벳 다음 문자부터 시작하도록함

- 크로아티아 알파벳이 아니라면 -> a+= 1 하여 바로 다음 문자부터 시작하도록 함

 

3. 각 확인마다 cnt+=1 로 결과 제출

 

 

*참고

풀이 초기에 str.find()를 이용한 풀이를 시도했으나,

해당 함수는 동일한 문자가 여러개 있어도 최초 문자의 시작 index만 반환 하여 문제가 있어 사용하지 않음

str.find(a) : str에 a로 시작하는 최초 index 반환

ex) 'apple'.find('p') => 1 반환 

 


  • 다른 사람 답안

실버 문제 다들 어려웠겠지라고 생각하며 열어본 코드에 충격받았다.

word = input()

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

for change in changes : 
	word = word.replace(change,'.')
    
print(len(word))

str.replace('A','B') : str에 있는 'A'를 찾아서 'B'로 바꾼 str 반환

크로아티아 알파벳을 점('.')하나로 치환하여 문자열의 길이 계산 

 

난 아직 한참 멀었구나.. !

 

댓글