[C언어 소스] 균형 원소 찾기

안녕하세요. 언제나 휴일입니다.

이번에는 균형 원소 찾기 소스 코드예요.

균형 원소는 자신보다 앞쪽 요소들의 합과 자신보다 뒤쪽 요소들의 합이 같은 원소를 말합니다.

균형 원소 찾기 실행 화면
균형 원소 찾기

소스 코드

//균형 원소 찾기

#include <stdio.h>
#include <malloc.h>
#include <memory.h>
#define MAX 10000

void TestCase(int *base, int n);//TestCase
int main(void)
{
    int arr1[3] = { 1, 2, 3 };
    int arr2[4] = { 1,2,3,3 };

    TestCase(arr1, 3);
    TestCase(arr2, 4);

    return 0;
}
int FindBalance(int *base, int n);//균형 원소 찾는 함수
void TestCase(int *base, int n)
{
    int i = 0;
    int balance;
    for (i = 0; i<n; i++)
    {
        printf("%d ", base[i]);
    }
    printf("\n");

    balance = FindBalance(base, n);
    if (balance == -1)
    {
        printf("균형 원소 없음\n");
    }
    else
    {
        printf("균형 원소: 인덱스 %d \n", balance);
    }
}
int FindBalance(int *base, int n)
{
    int *f_sum;//자신보다 앞쪽 요소들의 합
    int *t_sum;//자신보다 뒤쪽 요소들의 합
    int i;

    f_sum = (int *)malloc(sizeof(int)*n);
    memset(f_sum, 0, sizeof(int)*n);
    t_sum = (int *)malloc(sizeof(int)*n);
    memset(t_sum, 0, sizeof(int)*n);

    f_sum[0] = 0; //0번째 앞쪽의 합은 0으로 설정
    for (i = 1; i<n; ++i)//i를 n-1 개수만큼 반복
    {
        f_sum[i] = f_sum[i - 1] + base[i - 1];//j 앞쪽의 합은 i-1 앞쪽의 합에 i-1요소 값
    }
    i = n - 1;//i를 마지막 요소의인덱스로 설정
    t_sum[i] = 0; //마지막 요소 뒤쪽의합을 0으로 설정
    for (i--; i >= 0; --i)//i가 0보다 클 때 1씩 감소
    {
        t_sum[i] = t_sum[i + 1] + base[i + 1];//j 뒤쪽의 합은 i+1 뒤쪽의 합에 i+1 요소 값
        if (t_sum[i] == f_sum[i]) //i 뒤쪽의 합과  앞쪽이 합이 같으면
        {
            free(f_sum);
            free(t_sum);
            return i;
        }
    }
    free(f_sum);
    free(t_sum);
    return -1;
}