알고리즘

코드업 행복한 수(c++)

leeeehhjj 2024. 2. 17. 13:43

https://codeup.kr/problem.php?id=4032&rid=

 

행복한 수

1. 하나의 정수 n이 입력된다. (1≤n≤1,000)

codeup.kr

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
 
using namespace std;
#define MAXN ((int)1e3)
int N;
vector<int> v;
void InputData(){
    cin >> N;
}
 
int sum(int n) {
    int tmp = 0;
    while (n > 0)
    {
        tmp += pow(n % 10, 2);
        n /= 10;
    }
    return tmp;
}
 
bool isHappy(int n) {
    v.clear();
    v.push_back(n);
    while (true)
    {
        n = sum(n);
        if (n == 1) return true;
        if (find(v.begin(), v.end(), n) != v.end()) {
            if (n != 1) {
                return false;
            }
        }
        v.push_back(n);
    }
     
}
 
int solve(int n) {
    while (n > 0)
    {
        if (isHappy(n)) return n;
        n--;
    }
    return 1;
}
 
int main(){
    int ans = -1;
    InputData();//입력받는 부분
 
    //여기서부터 작성
    ans = solve(N);
 
    cout << ans << endl;//출력하는 부분
    return 0;
}