난이도 : 실버 Ⅴ
사용언어 : 파이썬
단계별 풀이 > 문자열
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 반환
크로아티아 알파벳을 점('.')하나로 치환하여 문자열의 길이 계산
난 아직 한참 멀었구나.. !
'🔖_Problem Solving > 백준' 카테고리의 다른 글
[백준 25314] 코딩은 체육과목 입니다. (0) | 2023.07.30 |
---|---|
[백준 25304] 영수증 (0) | 2023.07.30 |
[백준 11382] 꼬마 정민 (0) | 2023.07.30 |
[백준 10870번] 피보나치 수 5 (0) | 2022.03.17 |
[백준 1110번] 더하기 사이클 (0) | 2022.03.16 |
댓글