https://www.acmicpc.net/problem/2941
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.
크로아티아 알파벳 변경
č c=
ć c-
dž dz=
đ d-
lj lj
nj nj
š s=
ž z=
예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
첫째 줄에 최대 100글자의 단어가 주어진다.
알파벳 소문자와 '-', '='로만 이루어져 있다.
문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.
조금 더 짧게 풀어보고 싶었는데 떠오르지 않았다. 3글자 짜리가 하나를 어떻게 할까했는데 그냥 따로 if문으로 한번 더 체크해줬다. 새로 알게된 사실은 문자열 인덱싱(string[1:5] 등)은 제한 범위를 벗어나도 에러가 안뜨고 그냥 없는것처럼 처리한다는 것이다. 그래서 [idx:idx+3] 부분에서 남은게 두글자여도 에러없이 통과하게 된다. 알게된 유용한 정보다.
밑에는 다른사람이 replace를 이용해서 훨씬 간결하게 작성한 코드이다.
내 풀이
alphabet = input()
croatia = ["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="]
count = 0
idx = 0
while idx < len(alphabet):
if idx == len(alphabet) - 1:
count += 1
break
if alphabet[idx:idx+3] == "dz=":
idx += 3
elif alphabet[idx:idx+2] in croatia:
idx += 2
else:
idx += 1
count += 1
print(count)
배울만한 풀이
a = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
b = input()
for i in a:
b = b.replace(i, 'a')
print(len(b))