소스코드

#include <stdio.h>

int main (){
    int a, i;
    scanf("%d", &a);
    
	int number[10];
	int len = 0;
	int n = a;
	while (n!=0){
		number[len] = n % 10; 
		len++;
		n = n/10;
	}
	
	int ans, ans1, ans2;
	for (int temp = 1; temp<len; temp++){
		ans = 0, ans1 = 1, ans2 = 1; 
		for (i=0; i<temp; i++){
			ans1 = ans1*number[i];
		}
		for (i=temp; i<len; i++){
			ans2 = ans2*number[i];
		}
		if (ans1 == ans2) {
			printf("YES");
			ans = 1;
			break; 
		}
	}
	if (ans == 0) printf("NO");
	return 0;
}

좀 복잡하게 풀어서... 부분부분 설명해본다.

헷갈렸던 부분은 사실 발상을 잘못한 부분이고 구현의 어려움은 없었음..!

이 문제는 index를 써야 하기 때문에 애초부터 배열에 각 자리 수를 넣었어야 하는데.. 생각을 못하고 그냥 나머지연산으로 해결하려고 했다. 이렇게 해결은 불가능한듯...

배열에 각 자리 수를 넣는 부분은 인터넷 검색을 참고했다. 스스로 다시 구현해보아야 할 듯...

해설

    int a, i;
    scanf("%d", &a);

우선 수를 int a로 선언하고 scan받았다. 자료형은 int이다.

 

이제 각 자리수의 숫자를 배열에 저장한다. 

	int number[10];
	int len = 0;
	int n = a;
	while (n!=0){
		number[len] = n % 10; 
		len++;
		n = n/10;
	}

배열을 number로 선언하고, 각 자리수를 저장한다.

근데 거꾸로 저장되는게 단점 ㅎ... 여기서는 곱셈할거라 어차피 상관없다.

 

	int ans, ans1, ans2;
	for (int temp = 1; temp<len; temp++){
		ans = 0, ans1 = 1, ans2 = 1; 
		for (i=0; i<temp; i++){
			ans1 = ans1*number[i];
		}
		for (i=temp; i<len; i++){
			ans2 = ans2*number[i];
		}
		if (ans1 == ans2) {
			printf("YES");
			ans = 1;
			break; 
		}
	}
	if (ans == 0) printf("NO");
	return 0;

우선 temp를 지정했다. (앞으로 말하는 숫자들은 모두 index기준) temp는 1부터 len-1, 즉 마지막 index까지 한 칸씩 옮겨간다. 

temp를 기준으로 0부터 temp-1까지와 temp부터 len-1까지의 값을 곱해 두 개를 비교,

같은 값이 하나라도 존재하면 "YES" 를 출력하고 break로 반복문 탈출

아니면 (끝까지 0이면) "NO" 출력.

복사했습니다!