- Today
- Total
- BFS
- ๊ทธ๋ฆฌ๋
- ๊ตฌํ
- database
- java
- ์๋ฐ
- pytorch
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋ฒจ๋งํฌ๋
- ์ธํด
- Algorithm
- leetcode
- MST
- ๋ฌธ๋ฒ
- Graph
- ์กธ์ ์ํ
- tree
- ์์์ ๋ ฌ
- ์๋ฃ๊ตฌ์กฐ
- array
- ์๋ฐ์์ ์
- ๋ฐฑ์ค
- CS
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋ฐฑ์๋
- dp
- spring
- OOP
- PS
- ๋ค์ต์คํธ๋ผ
Partially Committed
[LEETCODE] 202. Happy Number ๋ณธ๋ฌธ
TITLE : 202.Happy Number
Description : Write an algorithm to determine if a numbernis 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.
Example 1:
Input: n = 19
Output: true
Explanation:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
Example 2:
Input: n = 2
Output: false
Constraints:
- 1 <= n <= 2^31 - 1
์ ์ N ์ด ์ฃผ์ด์ก์ ๋, ๊ฐ๊ฐ์ ์๋ฆฟ์์ ๋ํ ์ ๊ณฑ์ ํฉ์ผ๋ก N ์ ์ ๋ฐ์ดํธํ๋ ๊ณผ์ ์ ๋ฐ๋ณตํด์ ์ํํ ๋ N ์ด ๊ฒฐ๊ตญ์ 1์ด ๋ ์ ์๋ค๋ฉด Happy number ๋ผ๊ณ ์ ์ํ๋ค. ๋ชจ๋ ์ ๋ ฅ๋๋ ์ซ์๊ฐ happy number ์ด๋ผ๋ฉด ์ฝ๊ฒ ํ์ด๊ฐ ๊ฐ๋ฅํ์ง๋ง, ๊ทธ๋ ์ง๋ ์๋ค๋ ๊ฒ์ด ๋ฌธ์ ์ด๋ค. happy number ๊ฐ ์๋ ์ซ์๊ฐ ๋ค์ด์ค๋ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด cycle ์ ์ด๋ฃจ๋ฉฐ ๋ฌดํ ๋ฃจํ์ ๋น ์ ธ๋ฒ๋ฆด ์ ์๋ค.
๊ทธ๋ฌ๋ฏ๋ก happy number ์ธ์ง ์๋์ง๋ฅผ ํ๋จํ๋ ๊ณผ์ ์ค์ ํด๋น number ๊ฐ cycle ์ ์ด๋ฃจ๊ณ ์์ง๋ ์์์ง ํ์ธํด์ผ ํ๋ค.
๋ ์๊ฐํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ ๋ฌดํ๋๋ก number ๊ฐ ๋ฐ์ฐํ ๊ฒ์ธ์ง์ด๋ค. ์๊ฐํด๋ณด๋ฉด ๋ค์ด์ฌ ์ ์๋ ์ต๋ ์ซ์๋ 2147483647 ์ด์ง๋ง ๊ฐ ์๋ฆฟ์์ ์ ๊ณฑํฉ์ 260์ ๋ถ๊ณผํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ ๋๋ก ๋ฌดํ๋๋ก ๋ฐ์ฐํ์ง ์์ผ๋ฏ๋ก, ์ต์ข ์ ์ผ๋ก ๊ณ ๋ คํด์ผ ํ ๊ฒฝ์ฐ์ ์๋ happy number ์ธ ๊ฒฝ์ฐ(cycle ์ ์ด๋ฃจ์ง ์์)์ happy number ๊ฐ ์๋ ๊ฒฝ์ฐ(cycle ์ ์ด๋ฃจ๋ ๊ฒฝ์ฐ) ์ด๋ค. ํต์ฌ์ cycle ์ ์ ๋ฌด ํ๋ณ์ด๋ค. ์ด๋ฅผ ์ํด ๋ ์ฌ๋ฆด ์ ์๋ ํ์ด๋ 1. Hash table ์ ์ด์ฉํ ๋ฐฉ๋ฒ๊ณผ 2. Floyd's Cycle-Finding algorithm ์ด๋ค. Hash table ์ ์ด์ฉํ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค. update ํด์ผํ ์ซ์๋ฅผ ๊ณ์ hash table ์ insert ํ๋๋ฐ, ๋ง์ฝ ๋ค์์ผ๋ก update ํด์ผ ํ ์ซ์๊ฐ hash table ์ ์ด๋ฏธ ์กด์ฌํ๋ค๋ฉด cycle ์ ์ด๋ฃจ๋ ๊ฒ์ detect ํ ์ ์๋ค. ์ฝ๋๋ ์๋์ ๊ฐ๋ค. Vector ๊ฐ ์๋ Hash table ์ ์ฌ์ฉํ๋ ์ด์ ๋ insert ์ put, find ๊ฐ O(1) ์ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
[C++]
class Solution {
private:
int getNext(int n) {
int next_num = 0;
while (n > 0) {
next_num += (n % 10) * (n % 10);
n /= 10;
}
return next_num;
}
public:
bool isHappy(int n) {
set<int> hmap;
hmap.insert(n); int next_num = 0;
while (n != 1) {
next_num = getNext(n);
if (hmap.count(next_num)) return false;
hmap.insert(next_num);
n = next_num;
} return true;
}
};
Time complexity : O(logN)
- getNext ํจ์๋ ์๋ฆฟ์๋งํผ ๋ฐ๋ณต๋ฌธ์ ๋๊ธฐ ๋๋ฌธ์ log(n)
- isHappy ํจ์ ๋ด์์ log(n) + loglog(n) + logloglog(n) ...
๊ฒฐ๊ตญ ์๋ก ์๋ก ์ฐ๊ฒฐ๋ Linked List(์ดํ ์ฐ๊ฒฐ๋ฆฌ์คํธ) ๊ตฌ์กฐ์์ cycle ์ detection ํ๋ ๊ฒ์ด ํต์ฌ์ด๋ค. ์์ ๊ฐ์ด Hash Set/Map ์ ์ด์ฉํ ์๋ ์๊ฒ ์ง๋ง Floyd's Cycle Detection Algorithm ์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์๋ ์๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ํ ๋ผ์ ๊ฑฐ๋ถ์ด ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ธฐ์ตํ๋ฉด ์ฌ์ด๋ฐ, graph ์ ํ ๋ผ์ ๊ฑฐ๋ถ์ด๋ฅผ ์ง์ ์์ผ ๋ฌ๋ฆฌ๊ฒ ํ์ ๋ ๊ฐ์ ๋ ธ๋์ ๋๋ฌํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๋ฉด cycle ์ด ์๋ ๊ฑฐ๊ณ ๊ทธ๋ ์ง ์๊ณ NULL ์ ๋ง๋๊ฒ ๋๋ ๊ฒฝ์ฐ acyclic ํ๋ค๋ ๊ฒ์ด๋ค. ์ด ๋ฌธ์ ์์๋ happy number ์ด๋ ค๋ฉด ์ฌ์ดํด์ด ์กด์ฌํ๋ฉด ์๋๋ ๊ฒ์ด๋ฉฐ, ์ฌ์ดํด์ด ์กด์ฌํ์ง ์๋ ์กฐ๊ฑด์ ํ ๋ผ์ ๊ฑฐ๋ถ์ด๊ฐ ๊ฐ์ ๋ ธ๋์ ์์นํ๋ฉด ์๋๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก while ๋ฌธ ๋ด์์ slow!=fast ๋ฅผ ์กฐ๊ฑด์ผ๋ก ๋ฃ์ด์ฃผ๋ฉด cycle ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ updating ์ ๊ทธ๋ง๋๊ฒ ๋๊ณ , ์ฐ๋ฆฌ๋ ์ด ๋์ fast ๊ฐ 1์ธ์ง ์๋์ง์ ๋ฐ๋ผ true/false ์ฌ๋ถ๋ฅผ ๋ฐํํด์ฃผ๋ฉด ๋๋ค.
class Solution {
private:
int getNext(int n) {
int next_num = 0;
while (n > 0) {
next_num += (n % 10) * (n % 10);
n /= 10;
}
return next_num;
}
public:
bool isHappy(int n) {
int slow = n; int fast = getNext(n);
while (fast!=1 && slow!=fast) {
slow = getNext(slow);
fast = getNext(getNext(fast));
} return fast==1;
}
};
Reference : https://leetcode.com/problems/happy-number/solution/
'๐ฅ Algorithm || ๋ฌธ์ ํ์ด > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LEETCODE] 496. Next Greater Element I (0) | 2022.10.14 |
---|---|
[LEETCODE] 1790. Check if One String Swap Can Make Strings Equal (0) | 2022.10.13 |
[LEETCODE] 1502. Can Make Arithmetic Progression From Sequence (0) | 2022.10.12 |
[LEETCODE] 1822. Sign of the Product of an Array (0) | 2022.10.12 |
[LEETCODE] 1779.Find Nearest Point That Has the Same X or Y Coordinate (0) | 2022.10.11 |