์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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
- slidingwindow
- GenerativeAI
- gcp
- GenAI
- LeetCode
- ํฌํฌ์ธํฐ
- ์ฌ๋ผ์ด๋ฉ์๋์ฐ
- ๋ฆฟ์ฝ๋
- two-pointer
- Python
- stratascratch
- sql์ฝํ
- ๋ํธ์ฝ๋
- Microsoft
- nlp
- ์์ฐ์ด์ฒ๋ฆฌ
- ์๊ณ ๋ฆฌ์ฆ
- ๋ฆฌํธ์ฝ๋
- Python3
- ์ฝ๋์
- SQL
- codeup
- ๊ตฌ๊ธํต๋ฉ
- ํ์ด์ฌ๊ธฐ์ด100์
- ์์ฑํAI
- heap
- ํ์ด์ฌ์๊ณ ๋ฆฌ์ฆ
- dfs
- medium
- ํ์ด์ฌ
Archives
- Today
- Total
Tech for good
[Leetcode/TwoPointer] 443. String Compression ๋ณธ๋ฌธ


๐ ์ฝ๋ ์ค๋ช : ๋ฌธ์์ด ์์ถ ์๊ณ ๋ฆฌ์ฆ
์ด ์ฝ๋๋ ์ฐ์๋ ๋ฌธ์๋ฅผ ์์ถํ์ฌ ์๋ ๋ฐฐ์ด์ ์์ ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
๐ ์ฝ๋์ ํต์ฌ ๊ฐ๋
- ํฌ ํฌ์ธํฐ(Two-Pointer) ๊ธฐ๋ฒ ์ฌ์ฉ
- i โ ์๋ณธ ๋ฌธ์์ด์ ์ฝ์ด๊ฐ๋ ํฌ์ธํฐ
- write โ ์์ถ๋ ๋ฌธ์์ด์ ์ ์ฅํ๋ ํฌ์ธํฐ
- ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํด ๊ฐ์ ๋ฌธ์๊ฐ ์ฐ์๋๋ ๊ทธ๋ฃน์ ์ฐพ๊ณ , ์์ถํ์ฌ ์ ์ฅ
- ๊ทธ๋ฃน์ ๊ธธ์ด๊ฐ 1์ด๋ฉด ๋ฌธ์๋ง ์ ์ฅ
- ๊ทธ๋ฃน์ ๊ธธ์ด๊ฐ 2 ์ด์์ด๋ฉด "๋ฌธ์ + ์ซ์(ํ์)" ํํ๋ก ์ ์ฅ
class Solution:
def compress(self, chars: List[str]) -> int:
write = 0 # ์์ถ๋ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ์์น
i = 0 # ์๋ณธ ๋ฐฐ์ด์ ํ์ํ๋ ์์น
while i < len(chars): # ๋ฐฐ์ด์ ๋๊น์ง ํ์
char = chars[i] # ํ์ฌ ๋ฌธ์ ์ ์ฅ
count = 1 # ํ์ฌ ๋ฌธ์์ ๊ฐ์ (๊ธฐ๋ณธ๊ฐ 1)
# ๊ฐ์ ๋ฌธ์๊ฐ ์ฐ์ํด์ ๋ํ๋๋์ง ํ์ธ
while i + 1 < len(chars) and chars[i + 1] == char:
count += 1
i += 1 # ๋ค์ ๋ฌธ์๋ก ์ด๋
# ์์ถ๋ ๊ฒฐ๊ณผ ์ ์ฅ
chars[write] = char # ํ์ฌ ๋ฌธ์ ์ ์ฅ
write += 1 # ๋ค์ ์ ์ฅ ์์น๋ก ์ด๋
# ๋ฌธ์๊ฐ 2๊ฐ ์ด์ ๋ฐ๋ณต๋์์ผ๋ฉด ์ซ์๋ ์ ์ฅ
if count > 1:
for digit in str(count): # ์ซ์๋ฅผ ํ ๊ธ์์ฉ ์ ์ฅ
chars[write] = digit
write += 1
i += 1 # ๋ค์ ๋ฌธ์ ๊ทธ๋ฃน์ผ๋ก ์ด๋
return write # ์์ถ๋ ๋ฐฐ์ด์ ๊ธธ์ด ๋ฐํ
๐ข Step 1: ๋ณ์ ์ด๊ธฐํ
write = 0 # ์์ถ๋ ๋ฌธ์์ด์ ์ ์ฅํ ์์น (์ฐ๊ธฐ ํฌ์ธํฐ)
i = 0 # ์๋ณธ ๋ฌธ์์ด์ ์ฝ์ด๊ฐ๋ ์์น (์ฝ๊ธฐ ํฌ์ธํฐ)
- write: ์์ถ๋ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ์์น
- i: ์๋ณธ ๋ฐฐ์ด์ ํ์ํ๋ ์์น
๐ข Step 2: ์๋ณธ ๋ฐฐ์ด์ ํ์ํ๋ฉฐ ๋ฌธ์ ๊ทธ๋ฃน ์ฐพ๊ธฐ
while i < len(chars): # ๋ฐฐ์ด ๋๊น์ง ํ์
char = chars[i] # ํ์ฌ ๋ฌธ์ ์ ์ฅ
count = 1 # ํ์ฌ ๋ฌธ์ ๊ทธ๋ฃน์ ๊ฐ์ (๊ธฐ๋ณธ๊ฐ 1)
- char: ํ์ฌ ๋ฌธ์ ์ ์ฅ
- count: ์ฐ์๋ ๋ฌธ์์ ๊ฐ์ (์ต์ 1)
while i + 1 < len(chars) and chars[i + 1] == char:
count += 1 # ๊ฐ์ ๋ฌธ์๋ผ๋ฉด ๊ฐ์๋ฅผ ์ฆ๊ฐ
i += 1 # ๋ค์ ๋ฌธ์๋ก ์ด๋
- while ๋ฌธ์ผ๋ก ๊ฐ์ ๋ฌธ์๊ฐ ๋ช ๋ฒ ์ฐ์๋๋์ง ํ์ธ
- count ๊ฐ์ ์ฆ๊ฐ์ํค๋ฉฐ ๋ฐ๋ณต ๊ฐ์๋ฅผ ์ธก์
๐ข Step 3: ๋ฌธ์์ ๊ฐ์๋ฅผ chars ๋ฆฌ์คํธ์ ์ ์ฅ
chars[write] = char # ํ์ฌ ๋ฌธ์ ์ ์ฅ
write += 1 # ๋ค์ ์ ์ฅ ์์น๋ก ์ด๋
- ํ์ฌ ๋ฌธ์๋ฅผ write ์์น์ ์ ์ฅ
- write ํฌ์ธํฐ๋ฅผ ์ด๋
if count > 1: # ๋ฌธ์๊ฐ 2๋ฒ ์ด์ ๋ฐ๋ณต๋์์ ๋๋ง ์ซ์ ์ ์ฅ
for digit in str(count): # ์ซ์๋ฅผ ๋ฌธ์์ด๋ก ๋ณํ ํ ํ ๊ธ์์ฉ ์ ์ฅ
chars[write] = digit
write += 1
- count > 1์ธ ๊ฒฝ์ฐ, ๊ฐ์๋ฅผ ๋ฌธ์๋ก ๋ณํํ์ฌ ํ ๊ธ์์ฉ chars์ ์ ์ฅ
- ์๋ฅผ ๋ค์ด, "bbbb" โ "b4"
๐ข Step 4: ๋ค์ ๋ฌธ์ ๊ทธ๋ฃน์ผ๋ก ์ด๋
i += 1 # ๋ค์ ๋ฌธ์ ๊ทธ๋ฃน์ผ๋ก ์ด๋
- i๋ฅผ ์ฆ๊ฐ์์ผ ๋ค์ ๋ฌธ์๋ก ์ด๋
- ์๋ก์ด ๋ฌธ์ ๊ทธ๋ฃน์ ํ์
๐ข Step 5: ์์ถ๋ ๋ฐฐ์ด์ ๊ธธ์ด ๋ฐํ
return write # ์์ถ๋ ๋ฌธ์์ด์ ๊ธธ์ด ๋ฐํ
- write๋ ์์ถ๋ ๊ฒฐ๊ณผ์ ๊ธธ์ด๋ฅผ ๋ํ๋
โณ ์๊ฐ ๋ณต์ก๋ ๋ถ์
- i์ write ํฌ์ธํฐ๊ฐ ํ ๋ฒ๋ง ๋ฐฐ์ด์ ํ์ํ๋ฏ๋ก O(n)
- ์ถ๊ฐ ๊ณต๊ฐ์ ์ฌ์ฉํ์ง ์๊ณ ์๋ณธ ๋ฐฐ์ด์ ์์ ํ๋ฏ๋ก O(1) ๊ณต๊ฐ ๋ณต์ก๋
'IT > Computer Science' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[NeetCode 150/String Manipulation,TwoPointer] Valid Palindrome (0) | 2025.02.21 |
---|---|
[Leetcode/TwoPointer+Queue (Greedy)] 2149. Rearrange Array Elements by Sign (0) | 2025.02.21 |
[Leetcode/TwoPointer] 977. Squares of a Sorted Array (0) | 2025.02.21 |
[Leetcode/Set, TwoPointer] 349. Intersection of Two Arrays (0) | 2025.02.21 |
[Leetcode/String Manipulation] 151. Reverse Words in a String (0) | 2025.02.19 |