알고리즘/BOJ

백준 14954번 Happy Number

꾸준함. 2018. 5. 19. 18:33

문제 링크입니다: https://www.acmicpc.net/problem/14954


개인적으로 문제 의역

자연수 n에 대한 함수 f 정의: f(n)은 각 자리수의 제곱을 합한 결과를 반환한다.

예를 들어 n=19이면 1^2+9^2=82이다.

f 함수를 재귀적으로 호출했을 떄, 결과가 1이 출력되면 happy 숫자이다.

하지만, unhappy 숫자는 재귀적으로 호출했음에도 불구하고 결국 1이 출력되지 않는다.

unhappy 숫자의 대표적 예는 5이다.


n이 주어졌을 때 happy 숫자인지 unhappy 숫자인지 판별하시오.


#include <iostream>

#include <vector>

using namespace std;

 

vector<int> v;

 

void happyNumber(int N)

{

        //기저 사례: 1이 나오면 HAPPY

        if (N == 1)

        {

                 cout << "HAPPY" << endl;

                 return;

        }

        //기존에 나왔던 숫자 나오면 UNHAPPY

        for(int i=0; i<v.size(); i++)

                 if (N == v[i])

                 {

                         cout << "UNHAPPY" << endl;

                         return;

                 }

 

        v.push_back(N);

 

        int copy = N;

        int result = 0;

        //각 자리수 제곱

        while (copy)

        {

                 result += (copy % 10)*(copy % 10);

                 copy /= 10;

        }

        happyNumber(result);

}

 

int main(void)

{

        int N;

        cin >> N;

 

        happyNumber(N);

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~ 

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 2482번 색상환  (4) 2018.05.19
백준 1753번 최단경로  (4) 2018.05.19
백준 14753번 MultiMax  (0) 2018.05.19
백준 4963번 섬의 개수  (0) 2018.05.17
백준 1065번 한수  (0) 2018.05.16