티스토리 뷰

728x90
반응형

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

 

2941번: 크로아티아 알파벳

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

www.acmicpc.net

 

분명 쉽게 푸는 법이 있을텐데 .. 하는데 관련 함수가 index()랑 find() 밖에 없었다 ㅠㅠ

replace 진짜 많이 쓰는 건데 왜 생각이 안났을까 .. ㅠ

count도 ..

 

문자열에서 크로아티아 알파벳을 삭제하는 방식으로 풀었는데 이문제는 그렇게 풀면 절대 안되는 문제였다.

ndz=j와 같은 반례때문..

그래서 시도는 실패하고 인터넷 보고 replace로 풀었더니 코드 엄청 짧더라 ㅠ

 

우선 시도했지만 실패한 코드

 

시도 1 - 실패

line = input()
arr = ["lj","nj","c=","c-","dz=","d-","s=","z="]
res = 0
while True:
    #크로아티아 언어가 문자열에 있는지 확인할 변수 count
    count = 0
    for i in range(2,len(arr)):
        if arr[i] in line:
            idx = line.index(arr[i])
            line = line[:idx]+line[idx+len(arr[i]):]
            
            res+=1
            count+=1
            
        tmp = i

    if tmp == len(arr)-1 and count == 0:
        break; 
        
cnt_j=0

for i in range(len(line)):
    if line[i]=='j' and i!=0:
        if line[i-1]=='l':
            cnt_j+=1
        elif line[i-1]=='n':
            cnt_j+=1
print(res+len(line)-cnt_j)

실패했지만 코드 설명을 해보자면 .. 특수문자가 들어간 크로아티아 알파벳을 먼저 찾아서 문자열에서 제거한다.

그리고 찾은 갯수만큼을 저장한다.

만약 크로아티아 알파벳이 하나도 없다면, lj와 nj에 대해 검사한다.

 

사실 이것도 합쳐지는 경우에 대해 생각해서 푼 코든데 또다른 반레가 있었다.

생각해보니 split이나 문자열에서 삭제는 아예쓰면 안될듯

 

그래서 맞은 풀이는

 

시도 2 - 성공

line = input()
arr = ["lj","nj","c=","c-","dz=","d-","s=","z="]
for item in arr:
    line = line.replace(item,"*")

print(len(line))

 

엄청 짧쥬..? ㅎㅅㅎ .. 


문자열 관련 주요 함수!

 

index()

find()

replace()

split()

join()

upper() / lower()

lstrip() / rstrip() / strip()

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함