Skip to content

Commit 8d8e643

Browse files
committed
day24
1 parent 0c49782 commit 8d8e643

1 file changed

Lines changed: 44 additions & 0 deletions

File tree

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# 풀이 실패
2+
# 병합 정렬할 때 오른쪽에서 넘어간 개수 카운트하면 구할 수 있음
3+
class Solution:
4+
def countSmaller(self, nums: List[int]) -> List[int]:
5+
n = len(nums)
6+
ans = [0] * n
7+
arr = [(nums[i], i) for i in range(n)]
8+
9+
def merge_sort(enum):
10+
half = len(enum) // 2
11+
if half:
12+
left, right = merge_sort(enum[:half]), merge_sort(enum[half:])
13+
m, n = len(left), len(right)
14+
i = j = 0
15+
16+
# 투 포인터 사용해서 병합 진행한다
17+
while i < m or j < n:
18+
# 오른쪽 다 썼거나 왼쪽 값이 더 작거나 같은 경우
19+
if j == n or (i < m and left[i][0] <= right[j][0]):
20+
ans[left[i][1]] += j
21+
enum[i + j] = left[i]
22+
i += 1
23+
else:
24+
enum[i + j] = right[j]
25+
j += 1
26+
27+
return enum
28+
29+
merge_sort(arr)
30+
return ans
31+
32+
# 시간 복잡도 초과
33+
# ans = []
34+
# for i in range(len(nums)):
35+
# if i == len(nums) - 1:
36+
# ans.append(0)
37+
# break
38+
# check = 0
39+
# for j in range(i + 1, len(nums)):
40+
# if nums[i] > nums[j]:
41+
# check += 1
42+
# ans.append(check)
43+
44+
# return ans

0 commit comments

Comments
 (0)