AI 웹 개발 과정/알고리즘 5

알고리즘 - 3주차 [스택, 큐, 해쉬]

Stack : 한쪽으로만 자료를 넣고 뺄 수 있는 자료 구조. Last In First Out (LIFO) push(data) : 맨 앞에 데이터 넣기 pop() : 맨 앞의 데이터 뽑기 peek() : 맨 앞의 데이터 보기 isEmpty(): 스택이 비었는지 안 비었는지 여부 반환해주기 class Node: def __init__(self, data): self.data = data self.next = None class Stack: # 자료 구조 def __init__(self): self.head = None def push(self, value): # 메소드 new_node = Node(value) self.head.next = self.head self.head = new_node return..

알고리즘 - 3주차 [버블 정렬, 선택 정렬, 삽입 정렬, 병합 정렬]

정렬 : 데이터를 순서대로 나열하는 방법 1. 버블 정렬 : 첫번째 자료부터 바로 다음번의 자료와 비교하여 작은 숫자를 앞에 배치하며 앞뒤 자료 두개씩 계속해서 마지막 자료까지 비교해 나간다. 그러면 맨 뒤 자리부터 큰숫자들이 정렬 되어진다. ex) input = [4, 6, 2, 9, 1] def bubble_sort(array): n = len(array) for i in range(n - 1): for j in range(n - i - 1): if array[j] > array[j + 1]: array[j], array[j + 1] = array[j + 1], array[j] return bubble_sort(input) print(input) # [1, 2, 4, 6, 9] ** Swap 두 변수..

알고리즘 - 2주차 Array / LinkedList

Array 와 LinkedList 경우 Array Linked List 특정 원소 조회 O(1) O(N) 중간에 삽입 삭제 O(N) O(1) 데이터 추가 데이터 추가 시 모든 공간이 다 차버렸다면 새로운 메모리 공간을 할당 받아야 한다. 모든 공간이 다 찼어도 맨 뒤의 노드만 동적으로 추가하면 된다. 정리 데이터에 접근하는 경우가 빈번하다면 Array 를 사용하는 것이 좋다. 삽입과 삭제가 빈번하다면 LinkedList 를 사용하는 것이 더 좋다. 파이썬의 list 는 array로 구현되어있다. 하지만 내부적으로 동적배열을 사용하여 배열의 길이가 늘어나도 O(1)의 시간 복잡도가 걸리도록 되어있다. 따라서 파이썬의 배열은 링크드 리스트로 쓸 수 도 있고, 배열로도 쓸 수 있다. Class 클래스 : 분류..

알고리즘 - 1주차

1. 최댓값 찾기 숫자들로 이루어진 배열이 있을 때, 이 배열에서 가장 큰 수를 반환해라. 방법1. 가장 큰 수를 저장할 변수를 만들고 for문으로 배열을 돌아가며 변수와 비교한다. if 값이 더 크다면 큰수변수에 대입 def find_max_num(array): max_num = array[0] for num in array: if num > max_num: max_num = num return max_num print("정답 = 6 / 현재 풀이 값 = ", find_max_num([3, 5, 6, 1, 2, 4])) print("정답 = 6 / 현재 풀이 값 = ", find_max_num([6, 6, 6])) print("정답 = 1888 / 현재 풀이 값 = ", find_max_num([6, ..