백준

백준 2941 크로아티아 문자

King of Silicon Valley 2021. 9. 5. 12:31
728x90

https://www.acmicpc.net/problem/2941

 

2941번: 크로아티아 알파벳

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=

www.acmicpc.net


리트코드의 Roman to Integer 문제와 비슷한 문제이다. 

 

크로아티아 문자 표

 

Roman to Integer 문제를 풀 때 처럼 크로아티아 문자 표를 딕셔너리로 만들었다. 

cro = {'c=':2,'c-':1,'dz=':3,'d-':2,'lj':2,'nj':2,'s=':2,'z=':2}

각 문자열의 인덱스를 조회하면서 크로아티아 문제가 몇개가 있는지 확인한다. 

 

ans = 0
i = 0
while True:
    if word[i:i+3] in cro:
        i += 3
        ans += 1
    elif word[i:i+2] in cro:
        i += 2
        ans += 1
    else:
        i += 1
        ans += 1
    if i == len(word)-1:
        ans +=1
        break
    elif i >= len(word):
        break

조회할 인덱스 변수 i와 정답 변수 ans를 선언한다. 

 

크로아티아 문자 'dz='가 있는지 확인하기 위해서 처음 문자열 부터 3자리가 있는지 확인하고 있으면 i값을 3 올린다.

 

없으면 나머지 2자리수 문자 'c-,  d-,  lj,  nj' 가 있는지 확인하고 있으면 i값을 2올린다. 

 

나머지 's, z'는 그냥 알파벳으로 치기 때문에 따로 in연산자를 쓰지 않고 else문으로 처리해준다. 

 

반복문을 돌리다가 값이 마지막 인덱스면 ans값을 1 올리고 그이상이면 그냥 break를 한다.  

 

cro = {'c=':2,'c-':1,'dz=':3,'d-':2,'lj':2,'nj':2,'s=':2,'z=':2}
word = input()
ans = 0
i = 0
while True:
    if word[i:i+3] in cro:
        i += 3
        ans += 1
    elif word[i:i+2] in cro:
        i += 2
        ans += 1
    else:
        i += 1
        ans += 1
    if i == len(word)-1:
        ans +=1
        break
    elif i >= len(word):
        break
print(ans)

최종 답은 위와 같다. 

 

유형이 똑같은 문제를 풀으니까 쉽게 풀 수 있었다. 

'백준' 카테고리의 다른 글

[JAVA] 9093 단어 뒤집기 (문자열 다루기)  (0) 2021.11.09
☕️ [JAVA] 백준 2581_소수  (0) 2021.10.05