작심삼일

[LeetCode] 413 | Arithmetic Slices | Python 본문

스터디/코테

[LeetCode] 413 | Arithmetic Slices | Python

yun_s 2022. 3. 3. 10:03
728x90
반응형

문제 링크: https://leetcode.com/problems/arithmetic-slices/


문제

An integer array is called arithmetic if it consists of at least three elements and if the difference between any two consecutive elements is the same.

  • For example, [1,3,5,7,9], [7,7,7,7], and [3,-1,-5,-9] are arithmetic sequences.

Given an integer array nums, return the number of arithmetic subarrays of nums.

A subarray is a contiguous subsequence of the array.


조건

  • 1 <= nums.length <= 5000
  • -1000 <= nums[i] <= 1000

내 풀이

주어진 순열(ex. [1,2,3,4,2,7])를 차례로 보며 등차순열이 깨지는 순간, 그때의 subarray(ex. [1,2,3,4])의 길이가 3 이상인 모든 subarray(ex. [1,2,3], [2,3,4], [1,2,3,4])는 Arithmetic하다.

길이가 3이상인 모든 subarray의 갯수를 찾는 것은 1부터 len(subarray)-2까지의 합이다.


코드

class Solution:
    def numberOfArithmeticSlices(self, nums: List[int]) -> int:
        N = len(nums)
        if N < 3:   return 0
        
        past = nums[1] - nums[0]
        ans, count = 0, 2
        for n in range(1, N-1):
            if nums[n+1] - nums[n] == past:
                count += 1
            else:
                past = nums[n+1] - nums[n]
                if count > 2:
                    ans += sum([x for x in range(count-1)])
                count = 2
                
        if count > 2:
            ans += sum([x for x in range(count-1)])
                
        return ans
728x90
반응형
Comments