1. Sorting
1) 숫자 크기 순서대로 정렬
>>> L = [4, 3, 9, 6, 11, 2]
>>> L2 = sorted(L)
>>> L2
[2, 3, 4, 6, 9, 11]
>>> L
[4, 3, 9, 6, 11, 2]
>>> L.sort()
>>> L
[2, 3, 4, 6, 9, 11]
>>> L.reverse()
>>> L
[11, 9, 6, 4, 3, 2]
2) 문자열 길이 순서대로 정렬
>>> L = ['abcde', 'jk', 'fghi', 'lm']
>>> sorted(L, key = lambda x : len(x))
['jk', 'lm', 'fghi', 'abcde']
>>> sorted(L, reverse = True, key = lambda x : len(x))
['abcde', 'fghi', 'jk', 'lm']
3) 특정 값 기준으로 정렬
>>> L = [{'id':1, 'score':98},{'id':4, 'score':42}, {'id':2, 'score':100}]
>>> L.sort(key = lambda x : x['score'])
>>> L
[{'id': 4, 'score': 42}, {'id': 1, 'score': 98}, {'id': 2, 'score': 100}]
>>> L.sort(key = lambda x : x['score'], reverse = True)
>>> L
[{'id': 2, 'score': 100}, {'id': 1, 'score': 98}, {'id': 4, 'score': 42}]
>>> L.sort(key = lambda x : x['id'])
>>> L
[{'id': 1, 'score': 98}, {'id': 2, 'score': 100}, {'id': 4, 'score': 42}]
2. Search
1) linear Search : O(n)
def linear_search(S, x):
i = 0
while i < len(S) and S[i] != x:
i += 1
if i < len(S):
return i
else:
return -1
S = [3, 8, 2, 7, 6, 10, 9]
print(linear_search(S, 7))
print(S.index(7))
2) Binary Search : O(logn)
def binary_search(L, x):
lower = 0
upper = len(L) - 1
answer = -1
while lower <= upper:
middle = (lower + upper) // 2
if L[middle] == x:
answer = middle
break
elif L[middle] < x:
lower = middle + 1
else:
upper = middle - 1
return answer
L = [3, 8, 2, 7, 6, 10, 9]
L.sort()
print(L)
print(binary_search(L, 6))
print(L.index(6))
[2, 3, 6, 7, 8, 9, 10]
2
2
3. Recursive algorithm
def sum(n):
if n <= 1:
return n
else:
return n + sum(n-1)
print(sum(4))
def fib(n):
if n <= 1:
return n
else:
return fib(n - 1) + fib(n - 2)
print(fib(4))
def binary_search(L, x, lower, upper):
if lower > upper:
return -1
mid = (lower + upper) // 2
if x == L[mid]:
return mid
elif x < L[mid]:
return binary_search(L, x, lower, mid -1)
else:
return binary_search(L, x, mid + 1, upper)
L = [1, 3, 5, 6, 9, 13, 17, 25]
print(binary_search(L, 17, 0, len(L) - 1))
출처 : 어서와! 자료구조와 알고리즘은 처음이지? - 프로그래머스