본문 바로가기
DEV/백준 알고리즘

백준 알고리즘 2941번(파이썬)

by 올커 2022. 10. 11.

 

백준 2941번_파이썬 알고리즘

Q. 백준 2941. 크로아티아 알파벳

 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.

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


(1) 입력 : 첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.
단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.

(2) 출력 : 입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.


A. 풀이

# Q 백준 2941. 크로아티아 알파벳 ★★
croa_list = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']

croa_input = input()
cnt = len(croa_input)
# print(cnt)

for i in range(1, len(croa_input)):
    if croa_input[i-2:i+1] == 'dz=':
        cnt -= 2
        # print("1번 "+str(cnt))
    elif croa_input[i-1:i+1] in croa_list:
        cnt -= 1
        # print("1번 "+str(cnt))
        
print(cnt)

 

1) 변수 선언부

 - 각 크로아티아 알파벳을 리스트에 넣어 생성한다.

 - 크로아티아 알파벳을 입력받기 위한 croa_input 변수를 생성한다.

 - 각 문자의 수를 카운트하기 위해 cnt변수를 생성하고, 일단 입력받은 croa_input의 총 길이를 넣는다.

   (이후의 검사를 통해 하나의 문자일 경우 빼줄 예정이다.)

 

2) 반복문 (for문)

 - 반복문의 변수 i는 1부터 len(croa_input)까지 반복한다.

   이때 len(croa_input)+1까지 범위를 잡지 않는다. 그 이유는 뒤의 if조건문에 있다.

 

3) 반복문 내 조건문(if문)

 - 주의할 것은 변경된 크로아티아 알파벳 중 'dž'는 'dz='로 3글자로 변경되지만 나머지 문자들은 2글자로 변경되는 것,  그리고 'ž'는 'z='로 변경되는 것 정도일 것 같다.

 - 위의 이유로 'dz='의 여부를 먼저 if문으로 걸러주어야 한다. 이 때, 이 글자는 3개의 문자로 이루어졌기 때문에 인덱싱 범위 지정을 [i-2:i+1]로 만들어주어야 한다. 그래야 i-2~i까지 조건 검색이 가능하다. 만약 있을 경우 cnt는 하나의 문자가 3글자로 이루어져있으므로 cnt -=2 를 계산해준다.

 - 위의 경우를 제외하곤 모두 2개의 문자로 이루어져 있다. 범위지정은 [i-1:i+1]로 잡아주고, cnt계산은 cnt -= 1을 계산한다.

 - 위의 range에서 for문의 범위지정을 len(croa_input)+1까지 잡지 않는 이유가 여기에 있다. len(croa_input)+1까지 범위를 잡을 경우 인덱스를 i+1까지 잡았기 때문에 list 범위를 넘어가기 때문에 오류가 난다.

 - 이는 어디까지나 위와 같이 코드를 짰기 때문이고, 다른 방식으로 범위를 잡을 수도 있다.

 

4) 출력

 - cnt를 계산한 결과값을 print()문을 사용하여 출력한다.


R. 리뷰

 - 조건이 많아질 수록 까다로운 부분들이 많이 생긴다. 특히 list의 범위, 단어의 인덱싱이 섞여있는 문제들은 많은 생각을 요하는 것 같다.

 - 리스트, 문자열의 속성과, 각 함수들의 속성, 인덱싱의 용법들을 잘 참고하여 본 문제는 다시 풀어보는 것도 도움이 많이 될 것 같다.

반응형

댓글