[ LeetCode ] 202 Happy Number

codesver·2023년 7월 17일
0

LeetCode

목록 보기
23/24
post-thumbnail

📌 Problem

1 이상의 정수가 주어졌을 때 정수의 각 자리별 제곱수의 합을 반복한다. 이 때 최종적으로 1이 될 수 있는 정수이면 true를 반환하고 그렇지 않다면 false를 반환한다. 예를 들어 19는 19 - 82 - 68 - 100 - 1 으로 변환하기 때문에 true를 반환한다. 반면에 2는 2 - 4 - 16 - 37 - 58 - 89 - 145 - 42 - 20 - 4으로 되면서 절대로 1이 되지 않기 때문에 1을 반환한다.

📌 Solution

무한 loop를 통해 계속해서 정수를 변환한다. 이 때 이전에 한 번이라도 나온 정수는 메모리에 저장한다. 이 과정 속에서 1이 나오면 true를 반환하고 메모리에 저장된 정수가 나오면 false를 반환한다.

📌 Code

class Solution {
    fun isHappy(n: Int): Boolean {
        var pre = n
        val memory = mutableSetOf(n)
        while (true) {
            val num = convert(pre)
            if (num == 1) return true
            else if (memory.contains(num)) return false
            memory.add(num)
            pre = num
        }
    }

    private fun convert(n: Int) = n.toString().map {
        it.digitToInt() * it.digitToInt()
    }.sum()
}
profile
Hello, Devs!

0개의 댓글