본문 바로가기
프로그래밍 이야기/C++ 기초

Find Pivot Index

by Mulder5 2021. 10. 19.
반응형

주어진 배열에서 Pivot Index를 찾아라.
Pivot이란 배열 상에 있는 값들 중, 임의의 인덱스를 중심으로 왼쪽과 오른쪽의 합이 같은 지점의 인덱스이다.

예 : [ 1, 8 , 2, 9, 2, 3, 6 ]  --> Pivot : 9

개념

  • 배열을 순회하는 인덱스를 중심으로  좌, 우의 값들의 합을 계산한다. ( LeftSum, RightSum )
  • LeftSum과 RightSum이 동일하면 해당 인덱스가 Pivot 이다. (종료)
  • LeftSum과 RightSum 이 다르면 순회를 계속 진행하되 이전 인덱스의 값을 저장한다. (PastPivotNum)

 

#include <iostream>

int accumulation(int* nums, int numSize)
{
    int resultSum = 0;
    for (int i = 0; i < numSize; i++)
    {
        resultSum += nums[i];
    }

    return resultSum;
}

int pivotIndex(int* nums, int numSize)
{
    // 입력 값의 전체 합
    int sum = accumulation(nums, numSize);

    // 피봇 왼쪽의 합
    int leftSum = 0;  
    // 피봇 오른쪽의 합
    int rightSum = sum;

    int pastPivotNum = 0;
    for (int i = 0; i < numSize; i++)
    {
        int num = nums[i];  // 현재 인덱스의 값
        rightSum = rightSum - num; // 오른쪽의 합은 이전 오른쪽의 합에서 현재 인덱스의 값을 뺀 것이다.
        leftSum = leftSum + pastPivotNum;   //왼쪽의 합은 이전 현재 값에서 피봇의 값을 더한 것.

        // 피봇을 찾은 결과
        if (leftSum == rightSum)
        {
            return i;
        }
        // 이전 피봇 값 저장.
        pastPivotNum = num;
    }

    // 피봇을 찾지 못한 경우
    return -1;
}

int main()
{
    int InputValus[7] = { 1, 8 , 2, 9, 2, 3, 6 };
    int result = pivotIndex(InputValus, 7);

    std::cout << "result : " << result << std::endl;
}
반응형

'프로그래밍 이야기 > C++ 기초' 카테고리의 다른 글

Find Peak Element  (0) 2021.10.25
Move Zeros  (0) 2021.10.18
이진 탐색 (Binary search)  (0) 2021.10.18
함수 오브젝트와 람다 표현식  (0) 2021.09.17
[Design Pattern] Container  (0) 2021.02.05