728x90
1. 문제
2. 풀이
Hash 를 사용한 기본 문제. 문제 이해를 완벽하게 못해서 헤맸다.
각 자리수를 제곱하여 sum 하는 사이클을 돌다가 만약 1로 끝나면 happy number 이므로 return true 아니면 return false
n=2 인 경우 2 -> 4 -> 16 -> 37 -> 58 -> 89 -> 145 -> 42 -> 20 -> 4 (cycle 발생)
즉 방문했던 숫자를 또 방문하면 return false를 반환해야한다.
3. 코드
class Solution:
def isHappy(self, n: int) -> bool:
answer = False
visited = {'n': True}
while (1):
str_num = str(n)
total = 0
for i in range(len(str_num)):
total += int(str_num[i]) * int(str_num[i])
if (total == 1):
answer = True
break
if str(total) in visited:
break
n = total
visited[str(total)] = True
return answer
다른사람 풀이
class Solution:
def isHappy(self, n: int) -> bool:
seen = set()
while n != 1 and n not in seen:
seen.add(n)
s = 0
for i in range(len(str(n))):
num = n % 10
n = n // 10
s += num ** 2
제곱은 파이선에서 **을 사용하고
digit n 을 10으로 계속 나누어서 갱신 && 10으로 나눈 나머지로 제곱해서 토탈 sum 을 구한다.
728x90
'코딩 테스트' 카테고리의 다른 글
[LeetCode] 290.Word Pattern (Python) (0) | 2025.01.28 |
---|---|
[LeetCode] 205. Isomorphic String (Python) (0) | 2025.01.28 |
[HackerRank] Contacts (Python) (0) | 2025.01.18 |
[HackerRank] Find the Running Median (Python) (0) | 2025.01.18 |
[HackerRank] Tree: Level Order Traversal (0) | 2025.01.18 |
댓글