Skip to content

Commit ed58d52

Browse files
committed
feat: Add Solution to DaleStudy#272
1 parent 3272976 commit ed58d52

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# import bisect
2+
from typing import List
3+
class Solution():
4+
def _my_bisect_left(self, a: List[int], x:int) -> int:
5+
"""
6+
์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ a์— x๋ฅผ ์‚ฝ์ž…ํ•  ๊ฐ€์žฅ ์™ผ์ชฝ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜
7+
"""
8+
# x๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ์ฒซ ๋ฒˆ์งธ ์›์†Œ์˜ ์ธ๋ฑ์Šค ์ฐพ์•„์ฃผ๊ธฐ
9+
# bisect.bisect_left(a, x)๋ฅผ ์ง์ ‘ ๊ตฌํ˜„
10+
low = 0 # ์‹œ์ž‘ ์ธ๋ฑ์Šค, 0์œผ๋กœ ์ดˆ๊ธฐํ™”
11+
high = len(a) # ๋ ์ธ๋ฑ์Šค, ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๋กœ ์ดˆ๊ธฐํ™”
12+
13+
while low < high:
14+
mid = low + (high - low) // 2
15+
if a[mid] < x:
16+
low = mid + 1
17+
else: # a[mid] >= x
18+
high = mid
19+
return low # low๊ฐ€ ์‚ฝ์ž… ์ง€์ 
20+
21+
def lengthOfLIS(self, nums: List[int]) -> int:
22+
"""
23+
"""
24+
if not nums: # nums๊ฐ€ ๋นˆ ๋ฐฐ์—ด์ด๋ผ๋ฉด ๋จผ์ € 0 ๋ฐ˜ํ™˜
25+
return 0
26+
tails = [] # ๊ฐ ๊ธธ์ด์˜ LIS๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋งˆ์ง€๋ง‰ ๊ฐ’์„ ์ €์žฅํ•  ๋ฆฌ์ŠคํŠธ
27+
for num in nums:
28+
# num์„ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์™ผ์ชฝ ์œ„์น˜ ์ฐพ๊ธฐ
29+
# -> tails ๋ฆฌ์ŠคํŠธ์—์„œ num ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ์ธ๋ฑ์Šค ์ฐพ๊ธฐ
30+
# -> ๋งŒ์•ฝ tails ๋ชจ๋“  ๊ฐ’๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์ถ”๊ฐ€ํ•  ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•จ
31+
idx = self._my_bisect_left(tails, num)
32+
33+
# ๋งŒ์•ฝ idx๊ฐ€ tails ํ˜„์žฌ ๊ธธ์ด์™€ ๊ฐ™๋‹ค๋ฉด
34+
# -> num์ด tails์˜ ๋ชจ๋“  ์š”์†Œ๋ณด๋‹ค ํฌ๋‹ค
35+
# -> tails์— num "์ถ”๊ฐ€"
36+
if idx == len(tails):
37+
tails.append(num)
38+
# ๋งŒ์•ฝ idx๊ฐ€ tails ํ˜„์žฌ ๊ธธ์ด๋ณด๋‹ค ์ž‘๋‹ค๋ฉด
39+
# -> ๊ฐ€๋Šฅ์„ฑ ๋ฐœ๊ฒฌ, tails[idx]๋ฅผ num์œผ๋กœ "๊ต์ฒด"
40+
# -> LIS๋ฅผ ๊ฐœ์„ 
41+
else:
42+
tails[idx] = num
43+
44+
# ๋ชจ๋“  ์ˆซ์ž ์ฒ˜๋ฆฌ ํ›„, tails ๊ธธ์ด๊ฐ€ LIS๊ธธ์ด๊ฐ€ ๋จ
45+
return len(tails)
46+
47+
48+
"""
49+
def lengthOfLIS_bruteforce(self, nums: List[int]) -> int:
50+
# ์ดˆ๊ธฐ์— ๊ตฌํ˜„ํ•œ ํƒ์š• ๊ธฐ๋ฐ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜
51+
# --- ๋ณต์žก๋„ ---
52+
# Time Complexity: O(n^2)
53+
# Space Complexity: O(1)
54+
# --- ํ•œ๊ณ„ ---
55+
# [์ง€๊ธˆ ๋‹น์žฅ ๊ฐ€์žฅ ์ข‹์•„๋ณด์ด๋Š” ์„ ํƒ์ด ์ „์ฒด์ ์œผ๋กœ๋Š” ์ตœ์ ์ด ์•„๋‹Œ ๊ฒฝ์šฐ]
56+
# nums = [0,1,0,3,2,3] ๊ฐ™์€ ๊ฒฝ์šฐ ๋‹ต์„ ์ฐพ์ง€ ๋ชปํ•จ (์˜ˆ์ธก ๊ฐ’: 4, ์‹ค์ œ ๊ฐ’: 3)
57+
# ๊ฐ ์š”์†Œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ํƒ์š•์ ์œผ๋กœ ๋‹ค์Œ ํฐ ์ˆ˜๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ชจ๋“  LIS๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ
58+
# ๊ฐ ์‹œ์ž‘์ ์—์„œ ํ•˜๋‚˜์˜ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ์ฐพ๋Š” ๊ฒƒ, ํ•ญ์ƒ ๊ธด ๊ฒƒ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†์Œ
59+
# ์ด๋ฏธ ์ฐพ์€ LIS ๋’ค์— ๋” ๊ธด LIS๊ฐ€ ์žˆ๋‹ค๋ฉด ์ฐพ์„ ์ˆ˜ ์—†์Œ
60+
n = len(nums) # n์€ nums์˜ ๊ธธ์ด(๊ฐœ์ˆ˜)
61+
if n == 0: # ๊ธธ์ด๊ฐ€ 0์ด๋ฉด ์šฐ์„ ์ ์œผ๋กœ 0์„ ๋ฐ˜ํ™˜
62+
return 0
63+
64+
max_overall_length = 0 # ์ „์ฒด ์ตœ๋Œ€ ๊ธธ์ด, 0์œผ๋กœ ์ดˆ๊ธฐํ™”
65+
66+
for idx_i in range(n): # 0๋ถ€ํ„ฐ n๊นŒ์ง€ ์ˆœํšŒํ•˜๋Š” ์™ธ๋ถ€ ๋ฃจํ”„
67+
current_length = 1 # ํ˜„์žฌ(index: idx_i) ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ 1๋กœ ์ดˆ๊ธฐํ™”
68+
last_element_in_subsequence = nums[idx_i] # ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๋งˆ์ง€๋ง‰ ์ˆซ์ž๋ฅผ ํ˜„์žฌ ์ˆซ์ž๋กœ ์ดˆ๊ธฐํ™”
69+
70+
for idx_j in range(idx_i + 1, n): # ๋‹ค์Œ ์š”์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ idx_j๋กœ ํ•˜์—ฌ ๋๊นŒ์ง€ ์ˆœํšŒ
71+
# ๋งŒ์•ฝ ๋‹ค์Œ ์š”์†Œ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๋งˆ์ง€๋ง‰ ์ˆซ์ž๋ณด๋‹ค ํฌ๋‹ค๋ฉด
72+
if nums[idx_j] > last_element_in_subsequence:
73+
# ๋งˆ์ง€๋ง‰ ์ˆซ์ž๋ฅผ ๋‹ค์Œ ์š”์†Œ๋กœ ๊ฐฑ์‹ 
74+
last_element_in_subsequence = nums[idx_j]
75+
# ํ˜„์žฌ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ 1 ์ฆ๊ฐ€
76+
current_length += 1
77+
78+
# ํ˜„์žฌ ๋ถ€๋ถ„ ์ˆ˜์—ด ๊ธธ์ด๊ฐ€ ์ „์ฒด ๋ถ€๋ถ„ ์ˆ˜์—ด ๊ธธ์ด๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ ๊ฐฑ์‹ 
79+
max_overall_length = max(max_overall_length, current_length)
80+
81+
return max_overall_length
82+
"""

0 commit comments

Comments
ย (0)