본문 바로가기

Algorithm/Mathematics

BaekJoon 1356 유진수

Link https://www.acmicpc.net/problem/1356

소스결과 1984 KB / 0 ms

출처 Baekjoon

언어 C++ 17

분류 수학

 

설명

어떤 수를 10진수로 표현한 후 그 수를 두 부분으로 나눠 각 부분의 자리수의 곱이 일치하는 경우가 존재하는 수를 출력한다.

 

 [ 출처 : Google Image ] 

유진이란 말을 듣고 떠오른건 미스터 션샤인의 유진 초이...

주어지는 수를 통해 두 부분으로 나눈 후 각 자리의 곱이 일치하는 경우가 존재하면 그 수는 유진수이고 YES로 출력한다. 반대의 경우는 NO

주어진 수를 각 자리로 나누어 배열에 저장한 후 범위를 나눠 곱해 일치 하는지를 확인 하는 방법으로 구현했다.

간단 간단쓰

 

알고리즘

1. 주어진 수의 길이를 log 함수를 통해 구한다.

2. 수어진 수를 각 자리 수로 나누어 배열에 저장한다.

3. 길이를 1부터 n - 1까지 나누어 문제 조건을 만족하는 경우를 탐색한다.

4. 만족하는 경우 YES를, 한번도 존재하지 않는다면 NO를 출력한다.

 

소스코드

#include <iostream>

using namespace std;

const int MAX = 10;
char input[MAX + 1];
int len;

bool yuZin(int cut)
{
	int left = input[0] - '0';
	int right = input[cut] - '0';

	for (int i = 1; i < cut; i++)
		left *= input[i] - '0';
	for (int i = cut + 1; i < len; i++)
		right *= input[i] - '0';

	return left == right;
}

int main()
{
	cin >> input;
	bool check = false;

	while (input[len] != '\0')
		len++;

	for (int i = 1; i < len; i++)
		check |= yuZin(i);

	if (check)
		cout << "YES";
	else
		cout << "NO";
	return 0;
}

 

'Algorithm > Mathematics' 카테고리의 다른 글

Baekjoon 16563 어려운 소인수분해  (0) 2019.03.31
Baekjoon 13458 시험감독  (0) 2019.03.08
BaekJoon 1074 Z  (0) 2019.01.29
BaekJoon 1076 저항  (0) 2019.01.21
BaekJoon 1652 누울 자리를 찾아라  (0) 2019.01.21