Study Anything ๐ง
413. Arithmetic Slices ๋ณธ๋ฌธ
#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% ์๋ค.
์์ฑํ ์ฝ๋๊ฐ ๊ธด ํธ์ด๋ผ ๋ณ๋ก ์ข์ง ์์ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ๊ฑฐ๋ผ๊ณ ์์ํ๋๋ฐ ์๊ฐ๋ณด๋ค ์ ๋์์ ๋๋๋ค.
๊ทธ๋๋ ์์ง ์ฝ๋๊ฐ ์์ ํ ๋ง์์ ๋๋ ๊ฑด ์๋๋ผ ๋ ๊ฐํธํ๊ฒ ํ ์ ์์๋์ง ๋ค๋ฅธ ์ฌ๋๋ค์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด ๋ณผ ์๊ฐ์ด๋ค.
'์๊ณ ๋ฆฌ์ฆ๋ฌธ์ ํ์ด > 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 |