준호씨의 블로그

leetcode - 30-Day LeetCoding Challenge - 2. Happy Number 본문

개발이야기/PS - Problem Solving, 알고리즘

leetcode - 30-Day LeetCoding Challenge - 2. Happy Number

준호씨 2020. 4. 21. 23:52
반응형

https://leetcode.com/explore/challenge/card/30-day-leetcoding-challenge/528/week-1/3284/

숫자 n이 "happy"인지 확인하는 알고리즘을 작성하십시오.

happy number는 다음 프로세스에 의해 정의된 숫자입니다. 양의 정수로 시작하여 숫자를 제곱의 제곱의 합계로 바꾸고 숫자가 1 (있을 때) 또는 반복될 때까지 프로세스를 반복하십시오. 이 과정이 1로 끝나는 숫자가 happy number입니다.

n이 happy number이면 True, 아니면 False를 반환합니다.

Example:

Input: 19
Output: true
Explanation: 
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

숫자의 각 자릿수를 제곱하여 더한 결과가 1인지 검사하면서 계속 반복합니다.

무한 반복을 방지 하기 위해 th라는 dictionary를 만들어서 같은 값이 나오면 종료하도록 처리하였습니다.

class Solution:
    def isHappy(self, n: int):
        th = {}

        while True:
            temp = 0
            for c in str(n):
                temp += int(c) * int(c)
            if temp == 1:
                return True

            n = temp

            if temp in th:
                return False
            else:
                th[temp] = 1

더 좋은 풀이 방법이 있는지 Solution을 보고 싶었으나 프리미엄 서비스를 구독해야 볼 수 있는가 보네요.

더 좋은 방법이 있는지는 좀 더 고민해 봐야겠습니다.

반응형
Comments