[프로그래머스] 콜라츠 추측 (Kotlin)

728x90

문제


이해

1. 짝수라면 2로 나눔
2. 홀수라면 3을 곱하고 1 더함
3. 같은 작업을 1이될때까지 반복

접근

  1. 1이 될때까지 분기 나눠주기
  2. count 500 되는 순간 return

풀이

class Solution {
    fun solution(num: Int): Int {
        var longNum = num.toLong()
        var count = 0
        while (count < 500 && longNum > 1) {
            count ++
            longNum = if (longNum % 2 == 0L) longNum / 2 else longNum * 3 + 1
        }
        return if (count == 500) -1 else count
    }
}

다른 사람의 풀이

class Solution {
    fun solution(num: Int): Int = collatzAlgorithm(num.toLong(),0)

    tailrec fun collatzAlgorithm(n:Long, c:Int):Int =
        when{
            c > 500 -> -1
            n == 1L -> c
            else -> collatzAlgorithm(if( n%2 == 0L ) n/2 else (n*3)+1, c+1)
        }
}
728x90

댓글

Designed by JB FACTORY