[leetcode 38] Count and Say

38. Count and Say

https://leetcode.com/problems/count-and-say/

해결 과정

같은 숫자 반복되는지, 몇번 반복 되는지를 검사하고 반복된 횟수와 해당 수를 합쳐 반환하는 메소드가 필요했다. 그리고 이 메소드에 최초 입력값은 “1”.

같은 숫자가 본인(n)뿐이면 “1n” 이므로 calculate()의 count 초기값은 1.

num은 for문을 돌면서, 현재 idx의 값(n)이 다음 idx의 값과 같으면 ++count 하고, 다르다면 “구해놓은 count + 현재 숫자n” 을 result 값에 더한다.

이때, idx+1 을 비교하고 있기때문에, IndexOutOfException 이 발생하지 않도록 idx 값을 체크해주며 마지막 숫자까지 검사가 잘 되는지 검증해본다.

코드

fun countAndSay(n: Int): String {
    var result = "1"
    for (i in 1 until n) {
        result = calculate(result)
    }
    return result
}

private fun calculate(num: String): String {
    var result = ""
    var count = 1
    num.toCharArray().forEachIndexed { idx, n ->
        if (idx != num.length - 1 && num[idx] == num[idx + 1]) {
            ++count
        } else {
            result = result + count + n
            count = 1
        }
    }
    return result
}

배운 점

  • idx != num.length - 1 비교를 하기때문에 마지막 수는 else 분기를 타며, “구해놓은 count + n” 을 계산할 수 있다.

Leave a comment