To Be Developer

[LeetCode] 724. Find Pivot Index (GoLang, Python) 본문

알고리즘/LeetCode

[LeetCode] 724. Find Pivot Index (GoLang, Python)

Jeff Hwang 2019. 4. 1. 18:01

https://leetcode.com/problems/find-pivot-index/

 

Loading...

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

[GoLang 풀이]

 

package main

import "fmt"

func main() {
	a := []int{1, 7, 3, 6, 5, 6}
	fmt.Println(pivotIndex(a))
}

func pivotIndex(nums []int) int {
	// nums의 길이
	var numsLen int = len(nums)
	// nums 원소들의 총 합
	sumNums := 0

	// sumNums를 구하기위한 반복문
	for _, ele := range nums {
		// _ index 사용 x
		// ele = nums의 원소
		sumNums += ele
	}

	// 왼쪽 집합의 합
	var sumLeft int = 0

	// 0부터 numsLen까지 반복
	for i := 0; i < numsLen; i++ {
		//pivot 은 nums[i]
		pivot := nums[i]

		// 만약 왼쪽의 합이 오른쪽의 합과 같지 않으면
		// pivot을 오른쪽으로 한칸 옮긴다.
		if sumLeft != sumNums-sumLeft-pivot {
			sumLeft += pivot
		} else {
			// 같다면 pivot의 index 리턴
			return i
		}
	}
	// 반복문을 무사히 나오면 pivot이 없으므로
	// return -1
	return -1
}

 

[Python 풀이]

 

class Solution(object):
    def pivotIndex(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        # array nums의 원소들의 합
        sumNums = sum(nums)
        # 왼쪽의 합을 저장한 변수
        sumLeft = 0

        # nums를 index 와 value를 반복문을 돌린다.
        for i, val in enumerate(nums):
            # 왼쪽의 합계가 Nums의 전체 합 - 왼쪽합계 - pivot 즉 오른쪽
            # 원소들의 합과 다르면 왼쪽의 합을 val 만큼 더한다.
            if sumLeft != sumNums - sumLeft - val:
                sumLeft += val
            else:
                # 같으면 i가 pivot 이 된다.
                return i

        # 무사히 반복문을 빠져나가면 pivot이 없으므로
        # -1 을 return 한다.
        return -1


if __name__ == "__main__":
    nums = [1, 7, 3, 6, 5, 6]
    #nums = [-1, -1, -1, 0, 1, 1]
    sl = Solution().pivotIndex(nums)
    print(sl)