코틀린 코딩테스트 강좌, 문자열 찾기

주제: 문자열 찾기

코딩테스트에서 문자열 관련 문제는 자주 출제됩니다. 본 강좌에서는 문자열 찾기 문제를 다루고, 이를 해결하기 위한 알고리즘 및 코드를 작성해 보겠습니다.

문제 설명

다음과 같은 문제를 해결해 보겠습니다:

문제: 주어진 문자열에서 특정 단어의 등장 횟수 세기

문자열 s와 단어 word가 주어질 때, 문자열 안에서 단어가 등장하는 횟수를 세어 반환하는 함수를 작성하세요. 단, 대소문자는 구분하지 않으며, 단어는 공백으로 구분된 독립적인 형태로만 인식됩니다.

입력 예시

s = "Kotlin은 프로그래밍 언어이다. kotlin은 함수형 프로그래밍 언어다."
word = "kotlin"

출력 예시

2

문제 해결 과정

이 문제는 문자열을 다루는 기본적인 문제로, 간단한 문자열 조작 기술을 요구합니다. 해결 프로세스는 다음과 같습니다:

  1. 문자열 정규화: 입력 문자열을 모두 소문자로 변환하여 대소문자를 구분하지 않도록 합니다.
  2. 단어 분리: 공백을 기준으로 문자열을 분리하여 단어 목록을 생성합니다.
  3. 단어 비교: 생성된 단어 목록에서 주어진 단어와 일치하는 단어의 수를 세어 반환합니다.

코드 구현

이제 위의 알고리즘을 코틀린으로 구현해 보겠습니다:

fun countWordOccurrence(s: String, word: String): Int {
    // 1. 문자열을 소문자로 변환
    val normalizedString = s.toLowerCase()
    // 2. 공백을 기준으로 문자열을 분리
    val words = normalizedString.split(" ")
    // 3. 동일한 단어의 카운트
    return words.count { it == word.toLowerCase() }
}

// 예제 사용
fun main() {
    val s = "Kotlin은 프로그래밍 언어이다. kotlin은 함수형 프로그래밍 언어다."
    val word = "kotlin"
    val occurrenceCount = countWordOccurrence(s, word)
    println(occurrenceCount) // 출력: 2
}

코드 설명

위 코드는 다음과 같은 방식으로 동작합니다:

  • 소문자 변환: s.toLowerCase() 메소드를 사용하여 주어진 문자열을 모두 소문자로 변환합니다.
  • 단어 분리: split(" ") 메소드를 사용하여 공백을 기준으로 문자열을 나눈 후, 단어 리스트를 생성합니다.
  • 단어 카운트: count { it == word.toLowerCase() }를 통해 리스트 안의 특정 단어와 일치하는 단어의 수를 계산하여 반환합니다.

테스트 케이스

이제 몇 가지 테스트 케이스를 작성하여 본 코드가 올바르게 작동하는지 확인해 보겠습니다.

fun runTests() {
    val testCases = listOf(
        Pair("Kotlin은 프로그래밍 언어이다. kotlin은 함수형 프로그래밍 언어다.", "kotlin") to 2,
        Pair("이것은 테스트 문자열입니다. 테스트는 중요합니다.", "테스트") to 2,
        Pair("Kotlin과 Java는 다른 언어이다. JAVA는 객체 지향 언어이다.", "java") to 2,
        Pair("문자열 찾기 문제", "없음") to 0
    )

    for ((input, expected) in testCases) {
        val (s, word) = input
        val result = countWordOccurrence(s, word)
        println("입력: \"$s\", 단어: \"$word\", 기대한 결과: $expected, 실제 결과: $result")
    }
}

// 테스트 실행
runTests()

결론

이번 강좌에서는 문자열 찾기 문제를 통해 코틀린에서 간단하게 문자열을 처리하는 방법을 배웠습니다. 문자열 탐색 및 조작은 문제 해결의 기초이므로, 실제 코딩테스트에서 자주 접할 수 있는 문제입니다. 위의 코드를 다양한 경우에 적용해보고, 다른 문자열 관련 문제들도 도전해 보시기 바랍니다!

지금까지 코틀린 코딩테스트 강좌였습니다. 감사합니다!