문제 링크입니다: 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 |