•
문제 링크 : LeetCodeHappy Number - LeetCode
•
문제 설명 : 조건에서 제시하는 Happy Number가 맞는지 확인
•
풀이 방법
◦
우선 각 자리수의 제곱의 결과를 미리 설정해두었다.
◦
매번 계산하는거와 얼마나 차이가 있을지는 모르겠지만…(둘다 O(1)) 그래도 매번 계산하는거보단 값을 가져오는게 더 빠를 것 같아 리스트로 설정해두었다.
◦
한자리수가 될때까지 반복하며, 1이거나 7일때는 Happy Number인 것을 확인하여 이 조건에 맞는지 boolean 값을 반환한다.
◦
제공된 테스트케이스처럼 n 이 그리 크지 않다면, 매 연산이 O(N)일 수 있겠지만 자리수가 긴 값이 n 으로 주어진다면 매 연산마다 자리수가 줄어들 가능성이 높다.
▪
즉, 매 연산마다 필요한 연산이 줄어듦 → 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
복사