[BOJ] 1356 유진수

GirlFriend-Yerin·2020년 8월 27일
0

알고리즘

목록 보기
70/131

Note

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

유진이란 말을 듣고 떠오른건 미스터 션샤인의 유진 초이...
주어지는 수를 통해 두 부분으로 나눈 후 각 자리의 곱이 일치하는 경우가 존재하면 그 수는 유진수이고 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;
}

2019-01-29 20:54:26에 Tistory에서 작성되었습니다.

profile
개발할때 가장 행복한 개발자입니다.

0개의 댓글