끄적끄적 코딩
article thumbnail

각 자리의 수를 제곱해서 더하는 것을 반복했을 때
최종적으로 1이 나오는 수는 HAPPY한 수입니다.
1이 나오지 않고 반복되는 수는 UNHAPPY한 수입니다.

나오는 수들을 vector에 넣어서 저장해두고
DFS를 통해서 1이 나올때 까지 계산을 반복합니다.
만약 DFS도중 vector에 있는 수가 나올 경우 UNHAPPY한 상태이며,
1이 나오는 경우면 HAPPY한 상태라고 판단할 수 있습니다.

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;

int n;
vector<int> check;

int solve(int x)
{
	check.push_back(x);
	int result = 0;

	while (x != 0) {
		result += pow(x % 10, 2);
		x /= 10;
	}

	if (result == 1) {
		return 1;
	}

	if (find(check.begin(), check.end(), result) != check.end()) {
		return 0;
	}

	return solve(result);
}

int main(int argc, char* argv[])
{
	cin >> n;

	solve(n) == 1 ? cout << "HAPPY" << endl : cout << "UNHAPPY" << endl;
	
	return 0;
}

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

[C++] 백준 4504번 배수 찾기  (0) 2019.10.02
[C++] 백준 13565번 침투  (0) 2019.10.01
[C++] 백준 10992번 별 찍기 - 17  (0) 2019.10.01
[C++] 백준 10991번 별 찍기 - 16  (0) 2019.10.01
[C++] 백준 10990번 별 찍기 - 15  (0) 2019.10.01

검색 태그