[Python] 백준 2941번
크로아티아 알파벳
ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
Input-1)
ljes=njak
Output-1)
6
Input-2)
ddz=z=
Output-2)
3
최초 접근 방식
- 내 입력에 크로아티아 알파벳(이하 alph)이 포함되어 있는지 확인한다.
- 포함되어 있으면 점수를 1개 증가시키고 내 입력 문자열에서 해당 alph를 공백값으로 치환한다.
- 1번 검증이 완료되고 남은 입력 문자열에서 공백을 없앤 후 갯수를 점수에 증가시킨다.
문제 해결
위와 같이 구현하니, dz=dz=, ljlj 등과 같이 연속으로 alph에 포함된 문자열이 주어졌을 때 한꺼번에 처리하는 문제가 발생하였다.
1
2
3
4
5
6
for i in cro_alph:
if n.find(i) != -1:
n = n.replace(i, ' ')
cnt += 1
n = n.replace(' ', '')
cnt += len(n)
그렇다면 아예 문자열을 치환할 때 공백값이 아닌 문자로 치환한 다음, 치환한 문자와 남은 문자의 갯수를 함께 세면 어떨까? 라는 방식으로 문제 해결을 시도했다.
문제 해결을 위한 접근 방식 수정
- 내 입력 문자열에 크로아티아 알파벳(이하 alph)이 포함되어 있는지 확인한다.
- 포함되어 있으면
점수를 1개 증가시키고내 입력 문자열에서 해당 alph를 ‘*‘으로 치환한다. - 1번 검증이 완료되고 입력 문자열에서 ‘*‘의 갯수를 점수에 증가시킨다.
- 이후 입력 문자열에서 ‘*‘을 제거하여 alph에 포함되지 않은 문자열 갯수를 점수에 증가시킨다.
1
2
3
4
5
6
7
8
9
10
n = str(input())
cro_alph = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
cnt = 0
for i in cro_alph:
if n.find(i) != -1:
n = n.replace(i, '*')
cnt += n.count('*')
n = n.replace('*', '')
cnt += len(n)
print(cnt)