sleepyotter. 2022. 2. 19. 17:52

중요한 점은 제곱 작업을 하다가 이전에 등장한 녀석이 나오면 무조건 끝이다. 어떻게 되는 이전에 등장한 녀석이 나왔다는 것은 순환이라는 말이기 때문에 끝이다. 또는 1이거나 음수가 나와도 끝이다. 아무튼, 더 이상 제곱하는 의마가 없다면 빠져나와서 1이랑 같은지 비교하고 out하면 된다.

class Solution {
public:
    bool isHappy(int n) {
        set<int> precedents;
        
        while(n>1 && precedents.find(n) == precedents.end())
        {
            precedents.insert(n);
            n = GetSquares(n);
        }
        return n==1;
    }
    
    int GetSquares(int n)
    {
        int sum=0;
        while(n>0)
        {
            sum += (n%10) * (n%10);
            n/=10;
        }
        
        return sum;
    }
};