Kotlin/Kotlin 알고리즘

백준 25501번 재귀의 귀재 Kotlin 구현해보기

kimc 2022. 10. 30. 09:25

```

백준 25501번 재귀의 귀재 Kotlin 구현해보기

```

Kimc Kotlin Study

이번 글을 통해 배워갈 내용

  1. 백준 25501번 재귀의 귀재 풀이

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

 

25501번: 재귀의 귀재

각 테스트케이스마다, isPalindrome 함수의 반환값과 recursion 함수의 호출 횟수를 한 줄에 공백으로 구분하여 출력한다.

www.acmicpc.net

 

백준 25501번 재귀의 귀재는

난이도 브론즈 등급의 문제로서

 

아래와 같은 코드 블록이 주어지면

테스트 케이스만큼 recursion함수가 몇 번 호출되는지

isPalindrome이 true인지 false인지 출력해주면 됩니다.

object Main {
    fun recursion(s: String, l: Int, r: Int): Int {
        return if (l >= r) 1 else if (s[l] != s[r]) 0 else recursion(s, l + 1, r - 1)
    }

    fun isPalindrome(s: String): Int {
        return recursion(s, 0, s.length - 1)
    }

    @JvmStatic
    fun main(args: Array<String>) {
        println("ABBA: " + isPalindrome("ABBA"))
        println("ABC: " + isPalindrome("ABC"))
    }
}

 

 


30분 정도 위에 링크를 방문하셔서 풀어보시고

안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.


입력을 받고

static 변수 하나를 추가해서 함수호출시마다 변화를 줘서 출력해도 되지만

뭔가 while문안에 static 변수 없이 쓰고 싶어서 아래와 같이 풀었습니다.

 

fun main(args: Array<String>) {
    // 입력
    val testCase = readln().toInt()
    val tcList = ArrayList<String>()
    for (i in 1..testCase) {
        tcList.add(readln())
    }
    // 출력
    val sb = StringBuilder()
    tcList.forEach { str -> sb.append(findPalindromeInfo(str)).append("\n") }
    if (sb.isNotEmpty()) {
        sb.setLength(sb.length - 1)
    }
    print(sb.toString())
}

// isPalindrome 과 recursion 함수의 호출 횟수
fun findPalindromeInfo(str: String): String {
    var start = 0
    var end = str.length - 1
    var isPalindrome = 1
    var rCount = 0

    while (start <= end) {
        rCount++
        if (str[start] != str[end]) {
            isPalindrome = 0
            break
        }
        start++
        end--
    }

    // 구조적 차이에 의한 보정
    if (isPalindrome == 1 && str.length % 2 == 0) {
        rCount++
    }

    return "$isPalindrome $rCount"
}

// https://codemasterkimc.tistory.com/

 

읽어주셔서 감사합니다

 

무엇인가 얻어가셨기를 바라며

 

오늘도 즐거운 코딩 하시길 바랍니다 ~ :)

 


 

728x90