목록Programming/Python 11
2030 Engineer

Divide : 파티션 나누기. 피벗보다 높은 수는 오른쪽 낮은 수는 왼쪽에. Conquer : 나눠진 파티션에서 다시 Divide 하기. 결국 재귀. mylist의 index start 부터 index end 까지 정렬. # 두 요소의 위치를 바꿔주는 helper function def swap_elements(my_list, index1, index2): my_list[index1], my_list[index2] = my_list[index2], my_list[index1] # 퀵 정렬에서 사용되는 partition 함수 def partition(my_list, start, end): pivot = my_list[end] p = end b = start i = start while i < p: if ..
합병 정렬은 두 리스트를 리스트가 하나가 남을 때까지 Divide하여 리스트가 1개인 것들끼리 비교하여 Conquer하고 서로 정렬된 리스트에 합쳐 combine하는 식으로 구성한다. 완성된 코드는 이러하며 def merge(list1, list2): merged_list = [] i = 0 j = 0 while i list2[j]: merged_list.append(list2[j]) j += 1 else: merged_list.append(list1[i]) i += 1 merged_list = merged_list + list1[i:] + list2[j:] return merged_list def merge_sort(m..
이 Divide and Conquer는 3단계로 나뉘어 진다. 1. Divide : 문제를 부분 문제로 나눈다. 2. Conquer : 각 부분 문제를 정복한다. 3. Combine : 부분 문제들의 솔루션을 합쳐서 기존 문제를 해결한다. 먼저 첫 번째 Divide 1 ~ 100의 합을 1 ~ 50, 51 ~ 100의 합으로 나눌 수 있다. 두 번째 이 두가지 나눈 것에대한 결과값을 Conquer하여 세 번째 combine해 문제를 풀면된다는 것이다. 예시) def consecutive_sum(start, end): # base case if start == end: return start # recurcive case else: mid = (start + end) // 2 return consecuti..
무차별 대입을 뜻하며 Attack을 붙이면 해킹 기법 중 하나인 무차별 대입 공격이 된다. 간단한 예시) 숫자카드가 왼쪽에 n장, 오른쪽에 n장이 있다. 두 수를 곱해서 가장 큰 수를 도출해 내고 싶을 때 이 brute force를 이용하면 된다. def max_product(left_cards, right_cards): multi_product = [] for i in range(len(left_cards)): for j in range(len(right_cards)): multi_product.append(left_cards[i] * right_cards[j]) return max(multi_product) # 테스트 print(max_product([1, 6, 5], [4, 2, 3])) print..

예시) 피보나치수열 1 2 3 4 5 6 7 8 9 10 11 12 # n번째 피보나치 수를 리턴 def fib(n): if n > 2: n = fib(n - 1) + fib(n - 2) return n else: return 1 # 테스트: fib(1)부터 fib(10)까지 출력 for i in range(1, 11): print(fib(i)) fib함수는 최소 계산 범위인 3번째 항을 제외하면 1을 리턴한다는 것을 먼저 생각했다. 그래서 따로 빼놨고 그다음 번째부터는 前 fib이 리턴하는 값과 前前 fib이 리턴하는 값을 리턴하도록 했다. 지금 생각해보니 return fib(n - 1) + fib(n - 2)을 해도 될 것 같다. 예시) 숫자의 합 1 2 3 4 5 6 7 8 9 10 11 # 1부터..

같은 문제를 풀더라도 이렇게 다르게 풀 수 있다. 어느 것이 더 효율적인지 한 번 보자 https://www.toptal.com/developers/sorting-algorithms Sorting Algorithms Animations Animation, code, analysis, and discussion of 8 sorting algorithms on 4 initial conditions. www.toptal.com 선택 정렬 (Selection Sort) 가장 작은 값을 찾아서 0번 인덱스에 놓고, 두번째로 작은 값을 찾아서 1번 인덱스에 놓고, 세번째로 작은 값을 찾아서 2번 인덱스에 놓고 ... 삽입정렬 (Insertion Sort) 자신이 있는 위치에서 왼쪽에 있는 수보다 작을 경우 한칸씩 ..
1. S Single responsibility principle 모든 클래스는 단 한 가지의 책임만을 갖고, 클래스 안에 정의되어 있는 모든 기능은, 이 하나의 책임을 수행하는 데 집중되어 있어야 한다. 즉 하나의 클래스로 너무 많은 일을 하지 말고, 딱 한 가지 책임만 수행하라는 뜻 만약 코드를 짰는데 에러가 발생했는데 클래스 안에 하나의 책임이 아닌 여러 책임을 수행할 경우 유지 보수가 어려워지고 동료 개발자에게 불편함을 호소당할 수 있다. 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52..
사실 파이썬의 캡슐화는 완전하지 않다. 다음 예시들을 보면서 알아보자 파이썬의 캡슐화는 언더바2개(일명 던더)를 사용해야 한다. 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 31 32 33 class Citizen: """주민 클래스""" drinking_age = 19 # 음주 가능 나이 def __init__(self, name, age, resident_id): """이름, 나이, 주민등록번호""" self.name = name self.set_age(age) self.__resident_id = resident_id def authenticate(self, id_field): """본인이 맞는지 확..