새소식

자료구조&알고리즘/알고리즘

구현_Leet #202: Happy Number

  • -

Write an algorithm to determine if a number n is happy.

A happy number is a number defined by the following process:

  • Starting with any positive integer, replace the number by the sum of the squares of its digits.
  • Repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1.
  • Those numbers for which this process ends in 1 are happy.

Return true if n is a happy number, and false if not.

 

Example 1:

Input: n = 19
Output: true
Explanation:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

Example 2:

Input: n = 2
Output: false

 

Constraints:

  • 1 <= n <= 231 - 1

 


Sol.1)

한 자리 숫자인데 짝수인 경우는 절대 1이 될 수 없다.
따라서 재귀로 돌면서 n이 한자리 숫자인데 1이면 True를 반환하고 짝수라면 False를 반환하도록 하였다.
4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4
import sys
sys.setrecursionlimit(10**7)

class Solution:
    def isHappy(self, n: int) -> bool:
        # 한 자리 숫자라면 그 값이 1이면 True
        # 한 자리 숫자인데 짝수이면 False
        if (n < 10):
            if n == 1:
                return True
            elif n == 2 or n == 4 or n == 6 or n == 8:
                return False

        temp = 0
        for s in str(n):
            temp += int(s)**2
        return Solution.isHappy(self,temp)

 

Sol.2)

재귀를 사용하지 않고 풀 경우,
제곱들의 합을 temp set에 저장하고 무한루프라면 set안의 값을 다시 만나게 된다 => False 반환
class Solution:
    def isHappy(self, n: int) -> bool:
        temp = set()

        while n not in temp:
            temp.add(n)
            n = sum([int(x)**2 for x in str(n)])

            if n == 1:
                return True
        return False
728x90

'자료구조&알고리즘 > 알고리즘' 카테고리의 다른 글

DFS/BFS  (0) 2022.05.17
투포인터_BOJ#2470 : 두 용액  (0) 2022.05.17
슬라이딩 윈도우_BOJ #21921: 블로그  (0) 2022.05.12
투 포인터와 슬라이딩 윈도우  (0) 2022.05.12
완전탐색_PRO #42842: 카펫  (0) 2022.05.12
Contents