안녕하세요. 지난 포스팅의 BOJ 5622번 : 다이얼에서는 문자 자체를 비교함으로써 해당 조건에 맞는 문제를 풀어보았습니다. 오늘은 문자열을 대치시키는 replace(old, new) 함수를 활용해서 문제를 풀어보도록 하겠습니다.
완벽한 코딩은 존재하지 않습니다. 제가 제출한 코드 역시 마찬가지고 그저 참고만 해주시길 바랍니다.
핵심 포인트
- 문자열 자료형
- replace 함수
제출 코드
cro = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
S = input()
for c in cro :
S = S.replace(c, '?')
print(len(S))
해설
이 문제는 접근하기에 따라서 어려워질수도 있고 쉬울수도 있는 문제입니다. 당장 이 문제를 보고 입력된 문자열에서 크로아티아 알파벳에 대한 하는 문자들을 조건문으로 분리하는 것을 생각할 수도 있습니다. 하지만, 그럴려면 꽤나 복잡하게 문제를 해결해야할 것 입니다.
문제의 본질을 보도록 하겠습니다. 결론적으로 저희는 어떤 크로아티아 알파벳이 쓰였는지는 중요하지 않습니다. 그저 사용된 전체 알파벳의 개수이죠. 따라서, 저희는 사용된 크로아티아 문자('c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=')를 동일한 한 개의 문자로 대치하는 것을 생각해볼 수 있습니다. 그럼에도 불구하고 저희는 사용된 크로아티아 알파벳의 개수는 보존됩니다.
이를 위해서 일단 크로아티아 알파벳이 어떤 것들이 있는지부터 정의를 해주어야하죠. 이를 cro 변수에 저장해줍니다. 그리고 반복문을 이용해서 크로아티아 알파벳들을 하나씩 순회하면서 입력된 문자열 내에 크로아티아 알파벳이 쓰였다면 이를 replace(old, new) 함수를 이용해서 새로운 문자로 바꾸어줍니다. 저 같은 경우에는 '?'로 바꾸어주었으나 다른 문자로 바꾸어도 상관은 없습니다. 그러면 최종적으로 영어 알파벳과 '?'로 이루어진 문자열이 나올테고 해당 문자열의 전체 길이를 출력하면 저희가 원하는 결과를 출력할 수 있습니다.
참고자료 및 그림출처
'Programming > Coding Problem' 카테고리의 다른 글
BOJ 1712번 : 손익분기점 (0) | 2022.07.05 |
---|---|
BOJ 1316번 : 그룹 단어 체커 (0) | 2022.07.04 |
BOJ 5622번 : 다이얼 (0) | 2022.07.01 |
BOJ 2908번 : 상수 (0) | 2022.07.01 |
BOJ 1152번 : 단어의 개수 (0) | 2022.06.28 |