본문 바로가기
Algorithm/Baekjoon

백준 2941번

by minhi 2024. 7. 10.

백준 2941번

 

c=, c-, dz=, ...가 한 묶음이니까 한 묶음씩 처리하면 좋겠지만 임의의 문자열을 한 묶음으로 처리하는 법은 모르겠고

 

처음에는 한 글자씩 따져보는 방법으로 접근했다.

import sys

word = list(sys.stdin.readline().rstrip())

ans = 0

for i in range(len(word)):

    if word[i] == "c":
        if word[i+1] == "=" or word[i+1] == "-":
            continue
        else:
            ans += 1
    elif word[i] == "=" or word[i] == "-":
        ans += 1
    elif word[i] == "d":
        if word[i+1] == "z":
            if word[i+2] == "=":
                continue
            else:
                ans += 1
        elif word[i+1] == "-":
            continue
        else:
            ans += 1
    elif word[i] == "z":
        if word[i+1] == "=":
            if word[i-1] == "d":
                continue
            else:
                continue
        else:
            ans += 1
    elif word[i] == "l":
        if word[i+1] == "j":
            continue
        else:
            ans += 1
    elif word[i] == "n":
        if word[i+1] == "j":
            continue
        else:
            ans += 1
    elif word[i] == "j":
        ans += 1
    elif word[i] == "s":
        continue
    else:
        ans += 1

print(ans)

 

이렇게 하니 VSCode에서는 잘 돌아갔지만 백준에서는 Index Error가 발생했다.

 

반복문에서 함부로 i+1, i+2 인덱스에 접근하도록 한 것도 반성해야 한다..!

 

이후 인덱스를 초과하지 않고 한 글자씩 따져보는 방법을 고민해봤는데 잘 모르겠어서 정답을 찾아봤다.

croatian = ["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="]

word = input()

for c in croatian:
    word = word.replace(c, "*")

print(len(word))

 

내겐 생소했던 replace 함수를 이용하니 한 글자씩이 아니라 한 묶음씩, 즉 문자열 단위로 인식할 수 있었다.

 

replace 함수는 특정 문자열을 바꿀 수 있는 함수로,

 

replace(바꿀 대상이 되는 문자열, 바꾼 결과가 되는 문자열)과 같이 사용한다.

 

위의 코드를 예시로 들어보면, ljes=njak가 *e**ak로 바뀔 것이다.

 

그리고 word.replace(c, "*")만으로 word가 변경되지 않기 때문에, 반드시 word = word.replace(c, "*")와 같이 작성해주어야 한다.

'Algorithm > Baekjoon' 카테고리의 다른 글

백준 2480번  (0) 2024.10.02
백준 1330번  (0) 2024.09.28
백준 2581번  (0) 2024.07.09
백준 2869번  (0) 2024.07.09
백준 2745번  (0) 2024.07.06