백준 2941번 - 크로아티아 알파벳 with Python
Q. 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.
크로아티아 알파벳 | 변경 |
č | c= |
ć | c- |
dž | dz= |
đ | d- |
lj | lj |
nj | nj |
š | s= |
ž | z= |
예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
입력> 첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.
단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.
출력> 입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
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=']
word = input()
count = 0
for i in croatia:
if (i in word):
count += 1
word = word.replace(i,' ')
for i in word:
if (i != " "):
count += 1
print(count)
처음엔 코드를 이렇게 짰다. croatia 리스트에 있는 단어들이 word에 존재하면 개수를 1 세주고, 그 문자를 공백으로 바꿔서 제거해주었다. 남아있는 알파벳 중 공백을 제외한 나머지 글자들을 세주었다.
하지만 이렇게 하니까 문제가 발생했다. 만약 같은 크로아티아 알파벳(ljlj, c=c=등)이 나온다면,
해당 문자들은 모두 지워지지만 개수를 한 개로만 세주었기 때문이다.
그래서 비슷한 맥락이지만 조금 다르게 바꾸어보았다. 이 코드는 구글링을 참고하여 만든 코드이다.
croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
word = input()
for i in croatia:
word = word.replace(i, "*")
print(len(word))
방법은 비슷하다.
만약에 croatia에 있는 알파벳들이 word에 있으면, word에 있는 그 알파벳들을 *표시로 바꾸어주었다.
이 코드를 보고나서, 위에서 if문을 굳이 쓸 필요가 없다는 것을 알게 되었다. word안에 그 문자가 있을 때만 replace할 수 있기 때문이다. 위에서는 공백으로 대체해주고, 아래에서는 별(*)표시로 대체해주었는데, 이는 딱히 상관은 없다!
마지막으로 해당 문자의 길이를 세어주면 된다. 훨씬 더 간단하고 직관적인 것을 볼 수 있다.
비록 내 코드는 틀렸지만, 방향성은 비슷하게 접근해 나갔다는 점에서 발전된 느낌이고 기분이 좋아졌다.
이렇게 계속 성장해서 앞으로는 구글링 없이도 코드를 짤 수 있었으면 좋겠다!
'우당탕탕 파이썬 with 하루하나 알고리즘' 카테고리의 다른 글
백준 1712 파이썬 - 손익분기점이 발생하는 지점 찾기 (feat.수학적 사고) (0) | 2022.04.13 |
---|---|
백준 1316 파이썬 - 그룹 단어의 개수 출력하기 (0) | 2022.04.12 |
백준 5622 파이썬 - 문자의 다이얼 위치 찾기! (0) | 2022.04.10 |
백준 2908 파이썬 - 주어진 숫자를 거꾸로 저장하기 (0) | 2022.04.09 |
백준 1152 파이썬 - 한 문장에 있는 단어의 개수 세기! (0) | 2022.04.08 |