In [ ]:
def binary_search(nums, x):
s = 0
e = len(nums) - 1
while s <= e:
mid = (s + e) / 2
if nums[mid] == x:
return mid
elif nums[mid] > x:
e = mid - 1
else:
s = mid + 1
# 찾고자 하는 수가 구간안에 없으면 mid값보다 한칸 더 큰값으로 옮겨줌
return -1
# 찾고자 하는 수가 list에 없으면 -1값으로 변환
nums = [1, 2, 4, 5, 7, 8, 10, 22, 34, 56, 89, 100]
print binary_search(nums, 8)
print binary_search(nums, 1)
print binary_search(nums, 89)
print binary_search(nums, 88)
print binary_search(nums, 100)
print binary_search(nums, 101)
In [ ]:
def factorial(n):
mul = 1
for i in range(2, n+1):
mul *= i
return mul
# assert는 True가 전달되면 아무런 동작을 하지 않고, False가 전달되면 예외 발생
assert(factorial(5) == 120)
assert(factorial(4) == 24)
assert(factorial(1) == 1)
In [ ]:
def recursive_fibonacci(n):
if n == 1 or n == 2:
return 1
return recursive_fibonacci(n-1) + recursive_fibonacci(n-2)
print recursive_fibonacci(15)
%timeit recursive_fibonacci(20)
In [ ]:
fib_cache = {}
def recursive_fibonacci_memo(n):
if n in fib_cache:
return fib_cache[n]
else:
if n == 1 or n == 2:
fib_cache[n] = 1
else:
fib_cache[n] = recursive_fibonacci_memo(n-2) + recursive_fibonacci_memo(n-1)
return fib_cache[n]
print recursive_fibonacci_memo(15)
%timeit recursive_fibonacci_memo(20)
In [ ]:
def square(x):
return x ** 2
lambda x : x**2 #위에 코드를 더 간결하게 1줄로 줄일 수 있는 함수
square2 = lambda x : x**2
print square
print square2
print square(4), square2(4)
In [ ]:
nums = [(1, 2), (9, 5), (8, 4), (7, 6), (10, 2), (4, 5)]
def get_key(item):
return item[1]
print sorted(nums)
print sorted(nums, key = get_key)
print sorted(nums, key = lambda item : item[1])
print sorted(nums, key = lambda item : item[0])
print sorted(nums, key = lambda item : item[0], reverse = True) #내림차순으로 정렬할 때