Search

Happy Number

문제 설명 : 조건에서 제시하는 Happy Number가 맞는지 확인
풀이 방법
우선 각 자리수의 제곱의 결과를 미리 설정해두었다.
매번 계산하는거와 얼마나 차이가 있을지는 모르겠지만…(둘다 O(1)) 그래도 매번 계산하는거보단 값을 가져오는게 더 빠를 것 같아 리스트로 설정해두었다.
한자리수가 될때까지 반복하며, 1이거나 7일때는 Happy Number인 것을 확인하여 이 조건에 맞는지 boolean 값을 반환한다.
제공된 테스트케이스처럼 n 이 그리 크지 않다면, 매 연산이 O(N)일 수 있겠지만 자리수가 긴 값이 n 으로 주어진다면 매 연산마다 자리수가 줄어들 가능성이 높다.
즉, 매 연산마다 필요한 연산이 줄어듦 → O(logN)
그리고 다른 솔루션을 찾아보니, 투 포인터로 푸는 경우는 찾기가 어려웠다.
차후 투 포인터로 풀 수 있는지 다시 풀어보려한다.
시간복잡도 : O(LogN)O(LogN)
성공 코드
class Solution: def isHappy(self, n: int) -> bool: # 0 ~ 1의 제곱 결과 미리 설정 math_info = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] result = n while True: temp = 0 for ch in str(result): temp += math_info[int(ch)] result = temp # 한자리 수 일때까지 반복 if result < 10: break # 1, 7은 조건에 만족하기 때문에 이 내용을 확인 return result == 1 or result == 7
Python
복사