반응형
https://leetcode.com/explore/challenge/card/30-day-leetcoding-challenge/528/week-1/3284/
[잘못된] 풀이
1. 각 자리수의 합을 구한다.
2. 각 자리수의 합의 길이가 1이하일 때까지 계속 돌린다
3. 각 자리수의 합이 1이면 true, 아니면 false
-> 실패ㅠ
- 각 자리수의 합의 길이가 1일 때도 제곱을 해야하는지 몰랐음.
- 각 자리수의 합이 순환되는지도 몰랐음
풀이
1. 각 자리수의 합을 구한다.
2. 합을 리스트에 저장한다.
3. 각 자리수의 합이 1이면 true, 리스트에 저장된 적이 있으면 false, 아니면 다시 합을 구한다.
def sum_digit(number):
return sum([int(i)**2 for i in str(number)])
class Solution:
def isHappy(self, n: int) -> bool:
seen = set()
num = sum_digit(n)
while True:
num = sum_digit(num)
if num == 1:
return True
elif num in seen:
return False
else:
seen.add(num)
'개발 > 알고리즘' 카테고리의 다른 글
파이썬 알고리즘 꿀팁 (0) | 2020.12.09 |
---|---|
[leetcode] week1 - Move Zeroes (0) | 2020.04.13 |
[leetcode] week1 - Maximum Subarray (0) | 2020.04.12 |
[leetcode] week1 - single number (0) | 2020.04.10 |
[프로그래머스] K번째 수 (0) | 2020.04.08 |
댓글