목록분류 전체보기 (132)
YS's develop story

👨🏼💻 알리고 카카오 알림톡 API 연동하기 (with Node js) ⌛ Problem 특정 이벤트가 일어났을 때 특정 유저에게 카카오 알림톡을 어떻게 보낼 수 있을 까요? 😕 알리고 서비스를 활용해서 Node js로 이를 구현해 보겠습니다. 📜 Solution 알리고 알리고 - 국내 최저가 문자발송 알리고 스마트문자, 단문8.4원 장문25원 그림60원 알리고 대량문자/단체문자/문자사이트/문자발송 smartsms.aligo.in:443 카카오 알림톡을 보내기 위해서는 위와 같은 사이트에 가입을 해야 합니다. 알림톡을 보내는 기능은 건당 6원 정도가 발생하는 유료 서비스입니다. 알림톡을 보내기 위해서는 카카오 채널이 등록되어 있어야 합니다. 또한 알림톡을 보내기 위해서는 템플릿을 미리 생성하여야 합니다..

👩💻 너비 우선 탐색 (BFS), 깊이 우선 탐색 (DFS) 정리 with Python 🥘 너비 우선 탐색 (Breadth-First-Search) Node 같은 레벨에 있는 Node들 (형제 Node들)을 먼저 탐색하는 방식입니다. 파이썬을 이용한 그래프 표현 코드 graph = dict() graph['A'] = ['B', 'C'] graph['B'] = ['A', 'D'] graph['C'] = ['A', 'G', 'H', 'I'] graph['D'] = ['B', 'E', 'F'] graph['E'] = ['D'] graph['F'] = ['D'] graph['G'] = ['C'] graph['H'] = ['C'] graph['I'] = ['C', 'J'] graph['J'] = ['I'] 너비..

👩💻 순차 탐색(Sequential Search)과 이진 탐색(Binary Search) 정리 🥘 순차 탐색(Sequential Search) 데이터가 담겨있는 리스트를 앞에서부터 하나씩 살펴보아서 원하는 데이터를 찾는 방법입니다. 🍀 순차 탐색 코드 def sequentialSearch(list, search): for index in range(len(list)): if list[index] == search: return True return False ☘️ 순차 탐색 시간 복잡도 찾고자 하는 값이 리스트의 맨 마지막에 있을 때, 리스트의 길이만큼 데이터를 비교해야 합니다. 따라서 시간 복잡도는 O(n)입니다. 🍳 이진 탐색 (Binary Search) 탐색할 데이터를 정확히 반으로 나누어 한쪽에..

👩💻 퀵 정렬 (Quick Sort) 정리 with Python 🥘 퀵 정렬 (Quick Sort)이란? 🌸 정렬 알고리즘의 꽃, Quick Sort 기준점 (Pivot)을 정해서, 기준점보다 작은 데이터는 왼쪽, 큰 데이터는 오른쪽으로 모으는 함수를 작성합니다. 나누어진 왼쪽, 오른쪽 데이터를 재귀 용법을 사용해서 다시 동일 함수를 호출하여 위 작업을 반복합니다. 함수는 왼쪽, Pivot, 오른쪽을 리턴하게 됩니다. Divde And Conquer 기법을 사용하는 대표 알고리즘 중 하나입니다. 🍳 퀵 정렬 구현 with Python # QuickSort def quickSort(list): if len(list) = pivot] return quickSort(left) + [pivot] + quick..

👩💻 병합 정렬 (Merge Sort) 정리 with Python 🍳 병합 정렬 (Merge Sort)이란? 재귀 용법을 활용한 정렬 알고리즘입니다. 리스트를 절반으로 잘라 비슷한 크기의 두 리스트로 나눕니다. 각 부분 리스트를 재귀적으로 병합 정렬을 이용해 정렬합니다. 두 부분 리스트를 다시 하나의 정렬된 리스트로 병합합니다. Merge Sort는 Divide And Conquer의 대표적인 예시 알고리즘입니다. 🥘 병합 정렬 구현 with Python def mergeSort(data): if len(data) leftPoint and len(right) > rightPoint: if left[leftPoint] > right[rightPoint]: merged.append(right[rightPo..

👩💻 동적 계획법과 분할 정복 정리 with Python 🥘 동적 계획법 (Dynamic Programming) 동적 계획법, Dynamic Programming이란? 입력 크기가 작은 부분 문제들을 해결한 후, 해당 부분 문제의 해를 활용해서, 큰 부분 문제를 해결하고 최종적으로 전체 문제를 해결하는 알고리즘 기법입니다. 상향식 접근법으로 가장 최하위 해답을 구한 후 이를 저장하고, 해당 결괏값을 이용해 상위 문제를 풀어가는 방식을 활용합니다. Memoization 기법을 활용합니다. Memoization (메모이제이션) : 프로그램 실행 시 이전에 계산한 값을 저장하며, 다시 계산하지 않도록 하여 전체 실행 속도를 빠르게 하는 기술입니다. 문제를 잘게 쪼갤 때, 부분 문제는 중복되어 재활용됩니다. ..

👩💻 버블 정렬, 선택 정렬, 삽입 정렬 정리 with Python 🥘 버블 정렬 버블 정렬이란? 인접한 두 데이터를 비교해서 앞에 있는 데이터가 뒤에 있는 데이터보다 크면, 자리를 바꾸는 알고리즘입니다. Python 코드 def bubbleSort(list): swaped = False for index in range(len(list) - 1): for index2 in range(len(list) - index - 1): if list[index2] > list[index2 + 1]: list[index2], list[index2 + 1] = list[index2 + 1], list[index2] swaped = True if swaped == False: break return list 시간 복..

👨🏼💻 Graph (그래프) 정리 With Python 🥝 Graph 란? 실제 세계의 현상이나 사물을 Vertex(정점)와 Edge(간선)로 표현하기 위해 사용합니다. Vertex : 위치를 말합니다. Node라고 하기도 합니다. Edge : 위치 간의 관계를 표시한 선입니다. Degree : 방향이 없는 그래프에서 하나의 정점에 인접한 정점의 수입니다. Simple Path : 처음 정점과 끝 정점을 제외하고 중복된 정점이 없는 경로입니다. (A-B-C는 Simple Path) Cycle : Simple Path의 시작 정점과 종료 정점이 동일한 경우입니다. 🍋 그래프의 종류 Undirected Graph 방향이 없는 그래프입니다. Edge를 통해 Vertex 양 방향으로 갈 수 있습니다. Dire..

👨🏼💻 Heap (힙) 정리 With Python 🥝 Heap 이란? 데이터에서 최댓값과 최솟값을 빠르게 찾기 위해 고안된 완전 이진트리(Complete Binary Tree)입니다. 완전 이진트리? Node를 삽입할 때 최하단 왼쪽 Node부터 차례대로 삽입하는 Tree 배열에 데이터를 넣고, 최댓값과 최솟값을 찾으려면 O(n) 이 걸리지만 힙에 데이터를 넣고, 최댓값과 최솟값을 찾으면 O(logn) 이 걸리기 때문에 최댓값, 최솟값을 빠르게 찾아야 하는 자료구조 및 알고리즘에 활용됩니다. 힙은 아래의 두 가지 조건을 가지고 있어야 합니다. 각 노드의 값은 해당 노드의 자식 노드가 가진 값보다 크거나 같습니다. 완전 이진트리 형태를 가집니다. 🍋 Heap VS Binary Search Tree 공통점..

👨🏼💻 Tree (트리) 정리 With Python 🥝 Tree란? Node와 Branch를 이용해서 Cycle을 이루지 않도록 구성한 데이터 구조입니다. 🍋 관련 용어 Node : 트리에서 데이터를 저장하는 기본 요소 Root Node : 트리의 최상위 노드 Level : 최상위 노드를 Level 0이라고 했을 때, 하위 Branch로 연결된 노드의 깊이를 나타냅니다. Parent Node : 어떤 노드의 부모 노드 Child Node : 어떤 노드의 자식 노드 Leaf Node : Child Node가 하나도 없는 노드 Sibling : 동일한 Parent Node를 가지는 노드 Depth : 트리에서 Node가 가질 수 있는 최대 Level (위 사진에서의 Depth는 2) 🍊 이진 탐색 트리 이..