본문 바로가기
코딩테스트

[Python] 2941번 - 크로아티아 알파벳

by 박매트 2024. 5. 24.

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

 

나의 답

li = ["c=", "c-","dz=", "d-", "lj", "nj", "s=", "z="]
string = input()

cnt = 0

for check in li:
    cnt+=string.count(check)

print(len(string)-cnt)

 

입력받은 문자열에

각각 크로아티아 알파벳이 몇 개 들어있나 count했다.

전체 문자열 길이에서 - count를 빼줬다.

왜냐하면 크로아티아 알파벳은 길이가 2인데, 한 글자로 인식해야하기 때문이다.

 

알아가는 것

문자열.count('요소') => 해당 문자열에 요소(문자 혹은 문자열)가 몇 개 있는 지 카운트 해줌

-> 이 때 요소는 문자 1개가 될 수도 있고, 문자열이 될 수도 있다..

 

다른 사람 답

croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']
word = input()

for i in croatia :
    word = word.replace(i, '*')  # input 변수와 동일한 이름의 변수
print(len(word))

 

replace를 써도 되겠군 ... 메모 

 

Kotlin으로 풀면 - 나으 ㅣ답

fun main() {
    val li = listOf("c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z=")
    var string = readLine()!!
    
    var cnt = 0
    
    for (check in li) {
        while (string.contains(check)) {
            cnt++
            string = string.replaceFirst(check, " ")
        }
    }
    
    println(string.filterNot { it.isWhitespace() }.length + cnt)
}

 

- replaceFirst는 코틀린에서 문자열 내의 첫 번째 일치 항목을 다른 문자열로 대체하는 함수

 

다른 사람 

fun main() {
    val croatianAlphabets = listOf("c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z=")
    var inputString = readLine()!!
    
    for (alphabet in croatianAlphabets) {
        inputString = inputString.replace(alphabet, "*")
    }
    
    println(inputString.length)
}

 

replaceFirst는 코틀린에서 문자열 내의 첫 번째 일치 항목을 다른 문자열로 대체하는 함수입니다. 하지만, 이 경우에는 사용이 적절하지 않을수 있다 !

 

대신 replace() 메서드를 사용하여 모든 일치 항목을 대체하기.