Computer Science/Algorithm Problem

백준] 1356 - 유진수

TwinParadox 2018. 4. 23. 22:42
728x90

시간 제한 : 2초

메모리 제한 : 128MB




입력

첫째 줄에 수 N이 주어진다. 이 수는 2,147,483,647보다작거나 같은 자연수이다.




출력

첫째 줄에 N이 유진수이면 YES, 아니면 NO를 출력한다.




소스코드

#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
int main(void)
{
	int n, tmp, sub1, sub2, size;
	vector<int> arr;
	bool check = false;
	cin >> n;
	tmp = n;
	while (tmp > 0)
	{
		arr.push_back(tmp % 10);
		tmp /= 10;
	}
	size = arr.size();
	if (size > 1)
	{
		for (int i = 0; i < size; i++)
		{
			sub1 = sub2 = 1;
			for (int j = 0; j <= i; j++)
				sub1 *= arr[j];
			for (int j = i + 1; j < size; j++)
				sub2 *= arr[j];
			if (sub1 == sub2)
			{
				check = true;
				break;
			}
		}
	}
	if (check)
		cout << "YES";
	else
		cout << "NO";
}




Tip

자릿수 기준으로 계산을 이어가면서 유진수인지 아닌지를 판단하면 된다. 이 부분을 수학으로 분류한 이유는 모르겠고, 이 문제는 시뮬레이션 쪽으로 보는 게 더 맞을 것 같다.


728x90