문제링크
문제 설명
- 특수문자와 여러개의 알파벳이 하나의 문자로 이루어진 크로아티아 알파벳의 입력 개수를 구해라
주제
난이도
나의 부끄러운 초반 코드
input_text = input()
alphabets_arr = []
for i in range(len(input_text)):
if input_text[i] in ('=', '-'):
alphabets_arr.pop()
if input_text[i] == '=' and input_text[i - 2] == 'd':
alphabets_arr.pop()
alphabets_arr.append(input_text[i - 2:i + 1])
else:
alphabets_arr.append(input_text[i - 1:i + 1])
elif input_text[i] == 'j' and input_text[i - 1] in ('l', 'n'):
alphabets_arr.pop()
alphabets_arr.append(input_text[i - 1:i + 1])
else:
alphabets_arr.append(input_text[i])
print(len(alphabets_arr))
첫번째 코드의 문제점
- 길다..하지만 긴게 문제가 아니다. 비슷하거나 중복되는 코드들이 if와 elif를 통해 분산되어있다.
- 그렇다보면 주석을 아무리달아도 가독성이 떨어진다.
인터넷 자료 참고 후 다시 짠 코드 (이렇게 짧게 할 수 있던 것을...)
input_text = input()
words = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
for letter in words:
input_text = input_text.replace(letter, '*')
print(len(input_text))
배운 점
- Replace. 바꾸고자하는 단어가 있을 시 단어들은 배열에 넣고 for문과 replace를 통해 변경가능하다.
- 나는 두개이상의 문자를 하나로 취급하기위해서는 그 문자들을 따움표로 묶어줄 생각만 했었다.
하지만 따움표처리대신 다른 특수기호 (예를 들어 '*')로 replace하면 하나로 취급된다는 것을 배웠다.
- 또한 배열에 미리 단어들을 저장해 놓는 것은 하드코딩같아 지양하고 있었는데 이것또한 나의 편견임을 알았다. 무엇이든 간에 '적절히' 사용할 줄 알아야되겠다.