[Python] 백준 2941 | 크로아티아 알파벳 : replace()

heige·2023년 12월 5일
0

BOJ

목록 보기
16/46
post-thumbnail

문제

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

풀이

틀린 코드

내 첫 접근은 이렇다.

  • 단어를 입력 받는다.
  • 크로아티아 알파벳이 담긴 리스트를 생성한다.
  • 크로아티아 알파벳과 입력 받은 문자를 비교한다.
  • 크로아티아 문자가 있을 시 카운트, 기존 문자에서 제거하고 공백으로 대체한다. 공백 제거한 문자는 word_dup라는 새로운 변수에 저장.
  • word_dup(크로아티아 알파벳 제거 후 남은 문자)의 길이와 cnt 값을 더한다.

근데 문제가 생김🚨

word = input()
al = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
cnt = 0
word_dup = word
for i in al :
    if i in word_dup :
        cnt += word.count(i)
        word_dup = word_dup.replace(i, "")

print(len(word_dup) + cnt)

[반례]

input : zdz==ak
output : 4

단어는 5개로 이뤄져있으나 답은 4가 나온다.
입력 받은 문자에서 해당되는 크로아티아 알파벳을 공백으로 변경(제거)하면 다음 루프 때, 공백 제거 후 남은 단어가 조합되어 또 다른 크로아티아 알파벳을 만들어낼 케이스가 생김.
그래서 공백 대신 특정 문자로 대체하는 것이 안전하다.

맞은 코드

word = input()
al = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
cnt = 0
word_dup = word
for i in al :
    if i in word :
        word = word.replace(i, "*")
print(len(word))
  • 공백 대신에 입력 받은 문자열 자체에서 크로아티아 알파벳을 '*'로 대체하고, 문자의 총 길이를 출력한다.
  • if 문은 꼭 사용하지 않아도 될 것 같다.

💡 배운 내용

replace() : 문자열에서 특정 문자(열)를 대체

  • replace() 메소드는 문자열에서 특정 문자나 문자열을 다른 문자나 문자열로 대체한다. 예를 들어, 문자열 "Hello World!"에서 "o"를 제거하려면 다음과 같이 하면 된다.
string = "Hello World!"
new_string = string.replace('o', '')
print(new_string) 

# "Hell Wrld!"
profile
웹 백엔드와 클라우드 정복을 위해 탄탄한 기반을 쌓아가고 있는 예비개발자입니다. 'IT You Up'은 'Eat You Up'이라는 표현에서 비롯되어, IT 지식을 끝까지 먹어치운다는 담고 있습니다.

0개의 댓글