본문 바로가기

Algorithm

[LeetCode] Python - 202. Happy Number

https://leetcode.com/problems/happy-number/

 

Happy Number - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

생각

leetcode에서 같은 easy라도 난이도가 천차만별인것같다. 근데 이 문제는 가볍게 풀려서 정말 행복한 문제

 

주어진 예시에서 n=19일때를 모두 손으로 써보면 1이 되므로 True임을 알 수 있다. 그렇다면, 언제 False가 되는지를 알아야 한다.

 

n=2 일때를 계속 써보면 2, 4 , 16 , 37, 30, 9, 81, 65, 61, 37(싸이클 발생!) 이미 갔던곳을 다시 방문하면 절대 해피 넘버가 될 수 없다.

 

따라서, set() 으로 방문처리를 체크하여 문제를 풀었다.

 

Python Code

class Solution:
    def isHappy(self, n: int) -> bool:
        
        visited = set()
        
        while True:
            ret = 0
            for x in str(n):
                visited.add(int(x))
                ret += int(x)*int(x)
            if ret == 1:
                return True
            if ret in visited:
                return False
            n = ret