[백준] 2941. 크로아티아 알파벳

sangeun jo·2022년 2월 3일
0

코딩 테스트 대비

목록 보기
1/1

알고리즘

inp: 입력받은 크로아티 문자를 담아두고 사용하는 변수
cnt: 크로아티아 문자 개수

inp에 있는 글자가 2개만 남을 때 까지 다음 과정을 반복한다.

  1. 첫 두글자 혹은 첫 세글자가 크로아티아 문자인지 확인한다.
    -> 크로아티아 문자이면 cnt 1 증가. inp에서 제일 처음 두 글자를 제거한다. 처음으로 돌아가서 반복
  2. 만약 크로아티아 문자가 아니면(카운트가 증가하지 않았으면)
    ->제일 처음 한 글자를 일반 문자로 취급하고 cnt 1증가. inp에서 제일 첫글자를 제거한다. 처음으로 돌아가서 반복

루프가 끝나고 만약 inp에 남아있는 문자가 2글자고 크로아티 문자이면
-> cnt 1 증가. cnt 리턴
남아있는 문자가 크로아티 문자가 아니면(일반문자이면)
-> inp 길이 + cnt 리턴

예시

ljes=njak 의 첫 두글자 혹은 세글자가 크로아티 문자 lj 임
lj 제거 후 inp: es=njak
cnt: 1

es=njak 의 첫 두글자 혹은 세글자가 크로아티 문자가 아님.
첫글자 제거 후 inp: s=njak
cnt: 2

s=njak 의 첫 두글자 혹은 세글자가 크로아티 문자 s= 임
s= 제거 후 inp: njak
cnt: 3

njak 의 첫 두글자 혹은 세글자가 크로아티 문자 nj 임
nj 제거 후 inp: ak
cnt: 4
답: 6

코드

cro_list = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] 

inp = input()
cnt = 0 

while len(inp) > 2:
    start = cnt
    for c in cro_list:
        idx = inp[:len(c)].find(c) 
        if idx > -1:
            inp = inp[len(c):]
            cnt = cnt + 1
    if cnt == start:
        inp = inp[1:]
        cnt = cnt + 1

if len(inp) > 1 and inp in cro_list:
    cnt = cnt + 1
    print(cnt)
else:
    print(cnt + len(inp)) 
profile
코더가 아니라 개발자가 되자

0개의 댓글