본문 바로가기

코드연습/BOJ

BOJ 2941 : 크로아티아 알파벳

728x90

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.

크로아티아 알파벳변경
č c=
ć c-
dz=
đ d-
lj lj
nj nj
š s=
ž z=

예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.

 
data = input()
new_data = []

for i, n in enumerate(data):
    if n == '=':
        if data[i-1] == 'c' or data[i-1] == 's' or data[i-1] == 'z':
            new_data.pop()
            new_data.append(data[i-1:i+1])
            if data[i-2:i] == 'dz':
                new_data.pop()
                new_data.pop()
                new_data.append(data[i-2:i+1])

    elif n == '-':
        if data[i-1] == 'c' or data[i-1] == 'd':
            new_data.pop()
            new_data.append(data[i-1:i+1])

    elif n == 'j':
        if data[i-1] == 'n' or data[i-1] == 'l':
            new_data.pop()
            new_data.append(data[i-1:i+1])
        else:
            new_data.append(n)
    
    else:
        new_data.append(n)

print(len(new_data))

진짜, 어떻게 풀어야 할 지 한참을 생각을 한 문제.. 내가 푼 방식이 너무 조악하지만 일단 설명을 하자면..

먼저, ※특수문자 : '=', '-', 'j'

1. 알파벳을 변경해야 하는 규칙이 있다고 생각했다. '='의 조건이 제일 많으므로 '=' 부터 조건을 확인하고, 앞에 붙은 문자에서 'dz'일 때만 예외이기 때문에 예외처리를 수행했다.

2. '※특수문자'가 아닌 경우에는 무조건 해당 문자를 반환하는데 중간에 pop를 조합해서 특수문자가 포함된 단어들이 새로운 리스트에 담기도록 처리하였다.

 

조악한 풀이 이지만 통과는 하였다. 어렵다..

'코드연습 > BOJ' 카테고리의 다른 글

BOJ 2292 : 벌집  (0) 2022.04.08
BOJ 1316 : 그룹 단어 체커  (0) 2022.04.08
BOJ 2908 : 상수  (0) 2022.04.07
BOJ 2675 : 문자열 반복  (0) 2022.04.07
BOJ 1065 : 한수  (0) 2022.04.06