Study Anything ๐Ÿง

413. Arithmetic Slices ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜๋ฌธ์ œ ํ’€์ด/LeetCode

413. Arithmetic Slices

์†” 2022. 3. 4. 01:28

#Array #DynamicProgramming

 

 

์–ด๋–ค ์ •์ˆ˜ ๋ฐฐ์—ด์ด ์„ธ ๊ฐœ ์ด์ƒ์˜ ์›์†Œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ  ๊ทธ ์„ธ ์›์†Œ์—์„œ ์—ฐ์†๋œ ๋‘ ์›์†Œ์˜ ์ฐจ์ด๊ฐ€ ๊ฐ™์œผ๋ฉด

๊ทธ ๋ฐฐ์—ด์„ ์‚ฐ์ˆ ์ด๋ผ๊ณ  ํ•˜์ž. (ex. [1,3,5,7,9], [7,7,7,7], [3,-1,-3,-5,-9])

nums ๋ผ๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์‚ฐ์ˆ ์ธ ํ•˜์œ„ ๋ฐฐ์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ.

์—ฌ๊ธฐ์—์„œ ํ•˜์œ„ ๋ฐฐ์—ด์ด๋ž€ ๋ฐฐ์—ด์—์„œ ์—ฐ์†๋œ ์ผ๋ถ€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 


Trial 1 : Python3, 22/03/04

class Solution:
    def numberOfArithmeticSlices(self, nums: List[int]) -> int:
    	# ๋ฐฐ์—ด ๊ธธ์ด๊ฐ€ 3 ๋ฏธ๋งŒ์ด๋ฉด ์‚ฐ์ˆ ์ธ ํ•˜์œ„ ๋ฐฐ์—ด์€ ์—†๋‹ค
        if len(nums)<3:
            return 0
        
        arSbCount = []	# ์‚ฐ์ˆ  ํ•˜์œ„ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฆฌ์ŠคํŠธ
        count = 1
        # ์‚ฐ์ˆ  ํ•˜์œ„ ๋ฐฐ์—ด์˜ ๊ธธ์ด ๊ตฌํ•˜๊ธฐ
        for i in range(len(nums)-2):
            dff = nums[i+1] - nums[i]	
            if dff == (nums[i+2] - nums[i+1]):
                # ์‚ฐ์ˆ ์„ ๋งŒ์กฑํ•˜๊ณ  ์ฒซ๋ฒˆ์งธ์— ์œ„์น˜ํ•  ๋•Œ
                if count == 1:
                    count = count+2
                else:
                    count += 1
            # ์‚ฐ์ˆ ์ด ๋๋‚ฌ์„ ๋•Œ
            else:
                if count >= 3:
                    arSbCount.append(count)
                count = 1

        # ๋ฐ˜๋ณต๋ฌธ์ด ๋๋‚˜๋Š” ์‹œ์ ์˜ count ํŒ๋‹จ 
        if count >= 3:
            arSbCount.append(count)
        
        # ์‚ฐ์ˆ ์ธ ํ•˜์œ„ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋กœ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ
        re = 0
        if len(arSbCount) == 0:
            return 0
        for c in arSbCount:
            n = c-2
            while(n>0):
                re = re + n
                n -= 1
        return re
        
        '''
        # ํ•˜์œ„ ๋ฐฐ์—ด์˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•
        if len(arSbCount) == 0:
            return 0
        for c in arSbCount:
            re = re + (c*(c+1)/2) - (2*c-1)
        return int(re)
        '''

ํ’€์ด:

๋จผ์ € ์‚ฐ์ˆ ์˜ ์กฐ๊ฑด์— ์›์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ 3 ์ด์ƒ์ด์–ด์•ผ ํ•œ๋‹ค๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ ์ด ๋ฐฐ์—ด ๊ธธ์ด๊ฐ€ 3 ๋ฏธ๋งŒ์ด๋ฉด 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

๋‹ค์Œ์œผ๋กœ ์‚ฐ์ˆ ์„ ๋งŒ์กฑํ•˜๋Š” ํ•˜์œ„ ๋ฐฐ์—ด์ด ๋ฐฐ์—ด ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ ํ•˜์œ„ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ์–ธํ•˜๊ณ  ์‚ฐ์ˆ  ํ•˜์œ„ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•œ๋‹ค.

์‚ฐ์ˆ ์„ ๋งŒ์กฑํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์กฐ๊ฑด์ด ์—ฐ์†ํ•œ ๋‘ ์›์†Œ์˜ ์ฐจ๊ฐ€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ

๋ฐ˜๋ณต๋ฌธ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ฒซ ๋ฒˆ์งธ๋ผ๊ณ  ํ–ˆ์„ ๋•Œ ์ฒซ ๋ฒˆ์งธ์™€ ๋‘ ๋ฒˆ์งธ์˜ ์ฐจ์™€ ๋‘๋ฒˆ์งธ, ์„ธ๋ฒˆ์งธ์˜ ์ฐจ๋ฅผ ๋น„๊ตํ•˜๊ณ  ์‚ฐ์ˆ ์„ ๋งŒ์กฑํ•˜๋ฉด ํ˜„์žฌ ๊ธฐ์ค€์œผ๋กœ ์‚ผ๊ณ  ์žˆ๋Š” ์›์†Œ๊ฐ€ ์‚ฐ์ˆ  ํ•˜์œ„ ๋ฐฐ์—ด์˜ ๋ช‡ ๋ฒˆ์งธ ์›์†Œ์ธ์ง€๋ฅผ ํŒŒ์•…ํ•ด ์›์†Œ ๊ฐœ์ˆ˜๋ฅผ ๋ˆ„์ ํ•œ๋‹ค.

 

๊ทธ๋Ÿฌ๋‹ค ๋” ์ด์ƒ ๋ฐฐ์—ด์ด ์‚ฐ์ˆ ์„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด, ๋ˆ„์ ํ•œ ์›์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ 3 ์ด์ƒ์„ ๋งŒ์กฑํ•  ๋•Œ ์„ ์–ธํ–ˆ๋˜ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๊ณ  count ๋ฅผ ๋‹ค์‹œ 1๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ๋ฐ˜๋ณต๋ฌธ์ด ๋๋‚˜๋ฉด ๋งˆ์ง€๋ง‰ ๊ฒฝ์šฐ๋Š” count ์— ๋Œ€ํ•ด ํŒ๋‹จํ•˜์ง€ ๋ชปํ–ˆ์œผ๋ฏ€๋กœ ๋”ฐ๋กœ ํŒ๋‹จ์„ ๊ฑฐ์ณ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•œ๋‹ค.

 

์‚ฐ์ˆ  ํ•˜์œ„ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ํ† ๋Œ€๋กœ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

ํ•˜์œ„ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 3์ด๋ฉด 1๊ฐœ, 4์ด๋ฉด (2+1)๊ฐœ, 5์ด๋ฉด (3+2+1)๊ฐœ, n์ด๋ฉด ((n-2)+(n-3)+...+1)๊ฐœ์ธ ๊ทœ์น™์„ ๋ฐœ๊ฒฌํ•˜์—ฌ ์ด ๊ทœ์น™์„ ์ ์šฉํ•ด ๊ฐœ์ˆ˜๋ฅผ ์„ธ์—ˆ๋‹ค. ๋‹จ์ˆœํ•˜๊ฒŒ ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ˆ˜์‹์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ ์ˆ˜์‹์€ ํ•˜์œ„ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ n์ผ ๊ฒฝ์šฐ ๊ฐœ์ˆ˜๊ฐ€ ((n-2)+(n-3)+...+1) ์ธ ๊ฒƒ์„ ํ†ตํ•ด 1๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ํ•ฉ์„ ์ˆ˜์‹์œผ๋กœ ๊ตฌํ•˜๊ณ  (n+(n-1))(์ฆ‰, 2n-1)๋งŒํผ ๋นผ์ฃผ์—ˆ๋‹ค.

 

 

๋ฆฌ๋ทฐ:

๊ฒฐ๊ณผ ์ œ์ถœ์„ ํ•  ๋•Œ ์„ฑ๋Šฅ์ด ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๋‚˜์™€์„œ ๋ณดํ†ต ์—ฌ๋Ÿฌ ๋ฒˆ ์ œ์ถœํ•˜๊ณค ํ•˜๋Š”๋ฐ ์ด๋ฒˆ์—๋Š” ๊ฐ™์€ ์ฝ”๋“œ์ž„์—๋„ ๊ทธ ํŽธ์ฐจ๊ฐ€ ์ข€ ์ปธ๋‹ค. ์ตœ๊ณ  ์„ฑ๋Šฅ์€ ๋Ÿฐํƒ€์ž„ 99.52%, ๋ฉ”๋ชจ๋ฆฌ 97.59% ์˜€๋‹ค.

์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ๊ธด ํŽธ์ด๋ผ ๋ณ„๋กœ ์ข‹์ง€ ์•Š์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ๊ฑฐ๋ผ๊ณ  ์˜ˆ์ƒํ–ˆ๋Š”๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ์ž˜ ๋‚˜์™€์„œ ๋†€๋ž๋‹ค.

๊ทธ๋ž˜๋„ ์•„์ง ์ฝ”๋“œ๊ฐ€ ์™„์ „ํžˆ ๋งˆ์Œ์— ๋“œ๋Š” ๊ฑด ์•„๋‹ˆ๋ผ ๋” ๊ฐ„ํŽธํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋Š”์ง€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด ๋ณผ ์ƒ๊ฐ์ด๋‹ค.

 

 

728x90

'์•Œ๊ณ ๋ฆฌ์ฆ˜๋ฌธ์ œ ํ’€์ด > LeetCode' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

1470. Shuffle the Array  (0) 2022.03.10
118. Pascal's Triangle  (0) 2022.03.08
804. Unique Morse Code Words  (0) 2022.02.27
1637. Widest Vertical Area Between Two Points Containing No Points  (0) 2022.02.11
1108. Defanging an IP Address  (0) 2022.02.10
Comments