์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- GenerativeAI
- Microsoft
- ํ์ด์ฌ์๊ณ ๋ฆฌ์ฆ
- ์์ฐ์ด์ฒ๋ฆฌ
- stratascratch
- Python3
- ๋ฆฟ์ฝ๋
- ํ์ด์ฌ
- nlp
- dfs
- ๊ตฌ๊ธํต๋ฉ
- SQL
- Python
- ๋ํธ์ฝ๋
- two-pointer
- GenAI
- ์์ฑํAI
- ์ฝ๋์
- codeup
- LeetCode
- medium
- ์๊ณ ๋ฆฌ์ฆ
- slidingwindow
- gcp
- sql์ฝํ
- Blazor
- ์ฌ๋ผ์ด๋ฉ์๋์ฐ
- ํ์ด์ฌ๊ธฐ์ด100์
- ๋ฆฌํธ์ฝ๋
- ํฌํฌ์ธํฐ
Archives
- Today
- Total
Tech for good
[Leetcode/Sliding Window] 1652. Defuse the Bomb ๋ณธ๋ฌธ
๐ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ(Sliding Window)
- ๋ฐฐ์ด์์ ๋ถ๋ถ ํฉ์ ํจ์จ์ ์ผ๋ก ๊ณ์ฐํ๋ ๊ธฐ๋ฒ
- ๋งค๋ฒ ์ ์ฒด ํฉ์ ๋ค์ ๊ณ์ฐํ์ง ์๊ณ , ์ต์ด ์๋์ฐ์ ํฉ์ ๋ฏธ๋ฆฌ ๊ณ์ฐํด๋ ํ ๊ธฐ์กด ์๋์ฐ์ ๊ฐ์ ์กฐ๊ธ์ฉ ๋ณ๊ฒฝํ๋ฉด์ ์ ๋ฐ์ดํธํ๋ค.
- ์ฆ, ํ์ฌ ํฉ์์ ๋น ์ง ๊ฐ๊ณผ ์ถ๊ฐํ ๊ฐ๋ง ์ ๋ฐ์ดํธํ๋ฉด O(1) ์๊ฐ์ ๊ฐฑ์ ์ด ๊ฐ๋ฅํ ํจ์จ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ค!
class Solution:
def decrypt(self, code: List[int], k: int) -> List[int]:
n = len(code) # ์๋ ์ฝ๋ ๋ฐฐ์ด์ ๊ธธ์ด
# k๊ฐ 0์ด๋ฉด ๋ชจ๋ ์์๋ฅผ 0์ผ๋ก ๋ณ๊ฒฝ
if k == 0:
return [0] * n
# Extend code to handle circular array easily
code_extended = code * 2 # ์: [2,4,9,3] -> [2,4,9,3,2,4,9,3]
result = [0] * n # ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด
# ์ฌ๋ผ์ด๋ฉ ์๋์ฐ์ ์์์ ๊ณผ ๋์ ๊ฒฐ์
# k > 0: ํ์ฌ ์์์ ๋ค์ k๊ฐ์ ํฉ์ ๊ตฌํด์ผ ํจ
# k < 0: ํ์ฌ ์์์ ์ด์ k๊ฐ์ ํฉ์ ๊ตฌํด์ผ ํจ
start, end = (1, k) if k > 0 else (n + k, n - 1)
# Initial sum of the first window
window_sum = sum(code_extended[start:end + 1])
# ์๋ ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ์ ์ฉ
for i in range(n):
result[i] = window_sum # ํ์ฌ ์๋์ฐ ํฉ์ ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ์ ์ฅ
# Slide the window forward
window_sum -= code_extended[start] # ํ์ฌ ์๋์ฐ์์ ๊ฐ์ฅ ์ผ์ชฝ ์์ ์ ๊ฑฐ
window_sum += code_extended[end + 1] # ์๋กญ๊ฒ ํฌํจ๋ ์์ ์ถ๊ฐ
start += 1
end += 1
return result
- start, end = (1, k) if k > 0 else (n + k, n - 1):
- k > 0์ด๋ฉด ํ์ฌ ์์์ ๋ค์ k๊ฐ๋ฅผ ๋ํด์ผ ํ๋ฏ๋ก start = 1, end = k.
- start = 1: ํ์ฌ ์ธ๋ฑ์ค i์์ 1์นธ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ ๊ฐ๋ถํฐ ํฉ์ฐ ์์
- end = k: ํ์ฌ ์ธ๋ฑ์ค i์์ ์ค๋ฅธ์ชฝ k๋ฒ์งธ๊น์ง ํฌํจ
- ์ฆ, i์ ์ค๋ฅธ์ชฝ k๊ฐ์ ์ซ์๋ฅผ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ก ํฉ์ฐ
- k < 0์ด๋ฉด ํ์ฌ ์์์ ์ด์ k๊ฐ๋ฅผ ๋ํด์ผ ํ๋ฏ๋ก start = n + k, end = n - 1.
- ํ์ฌ ์ซ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก |k|๊ฐ์ ์ซ์๋ฅผ ๋ํด์ผ ํจ
- start = n + k:
- ์๋ฅผ ๋ค์ด, code = [2, 4, 9, 3], k = -2 -----> n = 4, k = -2์ด๋ฉด start = 4 - 2 = 2
- ์ฆ, ํ์ฌ ์ธ๋ฑ์ค i์์ ์ผ์ชฝ |k|๊ฐ ์ ์์น์ ์ธ๋ฑ์ค๋ถํฐ ์์
- end = n - 1:
- n = 4์ด๋ฉด end = 3
- ์ฆ, ํ์ฌ ์์ ๋ฐ๋ก ์ผ์ชฝ(์ด์ ์์)๊น์ง ํฌํจ
- ์ฆ, i์ ์ผ์ชฝ |k|๊ฐ์ ์ซ์๋ฅผ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ก ํฉ์ฐ
- k > 0์ด๋ฉด ํ์ฌ ์์์ ๋ค์ k๊ฐ๋ฅผ ๋ํด์ผ ํ๋ฏ๋ก start = 1, end = k.
- window_sum = sum(code_extended[start:end + 1]):
- ์ฒซ ๋ฒ์งธ ์์์ ๋ํด k๊ฐ์ ํฉ์ ๋ฏธ๋ฆฌ ๊ณ์ฐ.
๐ ์์ ์ ์ฉ
1๏ธโฃ code = [5,7,1,4], k = 3
- start = 1, end = 3
- window_sum = sum(code_extended[1:4]) → ๋ค์ 3๊ฐ์ ์ซ์ ํฉ
2๏ธโฃ code = [2,4,9,3], k = -2
- start = 4 - 2 = 2, end = 4 - 1 = 3
- window_sum = sum(code_extended[2:4]) → ์ด์ 2๊ฐ์ ์ซ์ ํฉ
โณ ์๊ฐ ๋ณต์ก๋ ๋ถ์
- ์ด๊ธฐ window_sum ๊ณ์ฐ: O(k)
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ์ ๋ฐ์ดํธ: O(n)
- ์ด ์๊ฐ ๋ณต์ก๋: O(n)
'IT > Computer Science' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Leetcode/Sliding Window] 1876. Substrings of Size Three with Distinct Characters (0) | 2025.03.03 |
---|---|
[Neetcode/Sliding Window] Permutation in String (0) | 2025.03.03 |
[Neetcode 150/Sliding Window] Longest Repeating Character Replacement (0) | 2025.02.26 |
[Leetcode/Sliding Window] 1176. Diet Plan Performance (0) | 2025.02.26 |
[Leetcode/Sliding Window] 643. Maximum Average Subarray I (0) | 2025.02.25 |