-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path202_Happy_Number.dart
More file actions
64 lines (56 loc) · 1.47 KB
/
202_Happy_Number.dart
File metadata and controls
64 lines (56 loc) · 1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
[LEETCODE 202]
URL: https://leetcode.com/problems/happy-number/description/?envType=study-plan-v2&envId=top-interview-150
* 문제
양의 정수 n이 주어졌을 때, 아래 과정을 반복하여 최종적으로 1이 될 수 있는지 확인하세요.
숫자의 각 자리 숫자를 제곱한 값을 모두 더합니다.
이 결과를 새로운 숫자로 사용하여 위의 과정을 반복합니다.
숫자가 1이 되면 이 숫자는 행복한 숫자입니다.
만약 1로 끝나지 않고 계속 순환(loop)하게 된다면, 이 숫자는 행복하지 않은 숫자입니다.
* 조건
1 <= n <= 2^31 - 1
* 예시
예제 1
입력: n = 19
출력: true
설명:
19 → 1² + 9² = 82
82 → 8² + 2² = 68
68 → 6² + 8² = 100
100 → 1² + 0² + 0² = 1
예제 2:
입력: n = 2
출력: false
설명:
2 → 2² = 4
4 → 4² = 16
16 → 1² + 6² = 37
37 → 3² + 7² = 58
58 → 5² + 8² = 89
89 → 8² + 9² = 145
145 → 1² + 4² + 5² = 42
42 → 4² + 2² = 20
20 → 2² + 0² = 4
이후 4 → 16 → ...이 반복됨.
*/
bool isHappy(int n) {
// Step 1: 중복 확인을 위한 Set 생성
Set<int> seen = {};
// Step 2: 반복해서 숫자의 제곱 합 계산
while (n != 1 && !seen.contains(n)) {
seen.add(n); // 현재 숫자를 Set에 추가
n = getSquareSum(n); // 제곱 합 계산
}
// Step 3: 숫자가 1이면 행복한 숫자, 아니면 false 반환
return n == 1;
}
// 숫자의 각 자리 제곱 합을 계산하는 함수
int getSquareSum(int num) {
int sum = 0;
while (num > 0) {
int digit = num % 10; // 현재 자리 숫자
sum += digit * digit; // 제곱 합산
num ~/= 10; // 다음 자리로 이동
}
return sum;
}