티스토리 뷰
Question
Write an algorithm to determine if a number n is happy.
A happy number is a number defined by the following process:
Starting with any positive integer, replace the number by the sum of the squares of its digits.
Repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1.
Those numbers for which this process ends in 1 are happy.
Return true if n is a happy number, and false if not.
숫자 n이 행복한지 확인하는 알고리즘을 작성하십시오.
행복한 숫자는 다음 프로세스에 의해 정의된 숫자입니다.
임의의 양의 정수로 시작하여 숫자를 해당 자릿수 제곱의 합으로 바꿉니다.
숫자가 1이 될 때까지 과정을 반복하거나(그 값이 머무를 위치) 1을 포함하지 않는 주기에서 끝없이 반복합니다.
이 프로세스가 1로 끝나는 숫자는 행복합니다.
n이 행복한 숫자이면 true를 반환하고 그렇지 않으면 false를 반환합니다.
제약사항
- 1 <= n <= 2^31 - 1
Solution
문제를 풀 때 고려한 사항
- n의 범위는 양의 정수인 int 범위이다.
- circle이 발생하는지 여부를 체크해야 한다.
Solution1
가장 쉽게 생각할 수 있는 방법은 그냥 무작정 계산을 해보는 것이다.
circle 체크를 위해 map을 사용한다.
class Solution {
public:
bool isHappy(int n) {
int sum = 0;
map<int, bool> my_map;
while(1){
while(n != 0){
sum += ((n%10) * (n%10));
n /= 10;
}
if(sum == 1) return true;
if(my_map.find(sum) != my_map.end()) return false;
my_map[sum] = true;
n = sum;
sum = 0;
}
return false; // not found
}
};
- Time complexity : O(logn)
- Space Complexity : O(1)
출처 : https://leetcode.com/explore/interview/card/top-interview-questions-medium/113/math/815/
'IT > Problem Solving' 카테고리의 다른 글
[C++] LeetCode : Pow(x, n) (0) | 2022.08.15 |
---|---|
[C++] LeetCode : Excel Sheet Column Number (0) | 2022.08.15 |
[C++] LeetCode : Factorial Trailing Zeros (0) | 2022.08.14 |
[C++] LeetCode : Merge Interval (0) | 2022.08.10 |
[C++] LeetCode : Longest Palindromic Substring (0) | 2022.08.10 |
- Total
- Today
- Yesterday
- 속초
- Tree
- 맛집
- PS
- coding interview
- 트리
- 리트코드
- interview question
- 자료구조
- 속초 맛집
- 내돈내산
- Medium
- 러스트 입문
- 러스트 기초
- LeetCode
- 코딩인터뷰
- Interview
- DP
- ProblemSolving
- rust
- 인터뷰
- algorithm
- 알고리즘
- 솔직후기
- 반드시 알아야 할 자료구조
- 러스트 배우기
- C++
- 기술면접
- Problem Solving
- 러스트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |