Algorithms

Find Pivot Index

Korokke 2022. 10. 7. 20:16

문제 

자신을 기준으로 왼쪽과 오른쪽의 합이 같은 수의 인덱스를 구하는 함수를 만들어라

만약 피벗이 존재 하지 않을 경우 -1을 리턴해라

 

풀이

1. sum = 전체 합, leftSum = 피벗의 왼쪽에 위치한 수들의 합, rightSum = 오른쪽에 위치한 수들의 합의 값을 가지는 변수를 생성 초기에는 sum과 같다

2. 배열이 가진 모든 수의 합을 구한다

3. rightSum 에서 현재 인덱스의 수를 빼고

4. 이전 인덱스의 수를 leftSum에 더한다.

5. leftSum과 rightSum을 비교한다. 같은 수가 나오면 피벗

 

코드

class Program
    {
        public static void Main()
        {
            int[] nums = { 1, 8, 2, 9, 2, 3, 6 };
            Console.WriteLine(FindPivotIndex(nums));
        }
        public static int FindPivotIndex(int[] array)
        {
            int sum = array.Sum();
            int leftSum = 0;
            int rightSum = sum;
            int pastPivotNum = 0;

            for (int i = 0; i < array.Length; i++)
            {
                int num = array[i];
                rightSum = rightSum - num;
                leftSum = leftSum + pastPivotNum;

                if(leftSum == rightSum)
                {
                    return i;
                }
                pastPivotNum = num;
            }
            return -1;
        }
    }

결과

3