목록분류 전체보기 (243)
차밍이
목차 1. 퀵 정렬 (Quick Sort) 이란? 정렬 알고리즘의 꽃 기준점(pivot이라 부름)을 정해서, 기준점보다 작은 데이터는 왼쪽, 크면 오른쪽으로 모으는 함수를 작성한다. 왼쪽과 오른쪽은 재귀 용법을 사용해서 다시 동일 함수를 호출하여 위 작업을 반복한다. 함수는 왼쪽 + pivot + 오른쪽 을 출력한다. 분할 정복에 속하는 정렬이라고 할 수 있다. 2. 퀵 정렬 코드 작성 소스코드 data_list = [49, 97, 53, 5, 33, 65, 62, 51] def quick_sort(num_list): if len(num_list) >> [5, 33, 49, 51, 53, 62, 65, 97] 알고리즘 구현 및 풀이 quicksort 함수 만들기 만약 리스트 개수가 한 개이면 해당 리스트..
목차 1. 정의 동적계획법(Dynamic Programming) "DP"라고 많이 부름 큰 문제를 해결하기 위해, 작은 문제를 부분 부분 해결하여 저장해놓고 사용한다. 상향식 접근법으로 가장 최하위 해답을 구한 후, 이를 저장하고, 해당 결과를 이용해서 상위 문제를 해결한다. Memoization 기법을 사용한다. 문제를 잘게 쪼갤 때, 부분 문제는 중복되어, 재활용된다. ex) 피보나치 수열 분할 정복(Divide and Conquer) 문제를 나눌 수 없을 때까지 나누어서 각각 문제를 풀면서 다시 합병하여 문제의 해답을 찾는다. 다시 합병한다. 하양식 접근법, 상위의 해답을 구하기 위해, 아래로 내려가면서 하위의 해답을 구하는 방식 일반적으로 재귀 함수로 구현 문제를 잘게 쪼갤 때, 부분 문제는 서로..
1. 선택 정렬 이란? 주어진 데이터 중, 최솟값을 찾는다. 해당 최소값을 가장 맨 앞의 데이터의 위차와 교체한다. 맨 앞의 최소값 데이터를 제외한 나머지 데이터를 대상으로 동일한 방법을 반복한다. 2. 예제 코드 import random data_list = random.sample(range(100), 10) print(data_list, end="\n\n") for i in range(len(data_list)-1): index = i for j in range(len(data_list)-i): if data_list[index] > data_list[j+i]: index = j+i data_list[index], data_list[i] = data_list[i], data_list[index] p..
버블 정렬 두 인접한 원소를 검사하면서 정렬하는 방법 앞에서부터 두 개의 데이터를 비교하면서 정렬한다. 한 번 실행하면 가장 큰 값이 가장 뒤로 정렬되는 방식이다. 두 번째 실행하면 그다음 큰 값이 가장 뒤에서 한번 전까지 데이터를 비교하며 정렬하게 된다. 시간 복잡도가 에 해당되므로 느리지만, 단순하다. data_list = [9, 7, 5, 3, 1] def bubbleSort(data_list): for i in range(len(data_list)): swap = False for j in range(len(data_list)-1-i): if data_list[j] > data_list[j+1]: swap = True data_list[j], data_list[j+1] = data_list[j+1..
목차 1. 삽입 정렬 방식 두 번째 인덱스에서부터 시작하여 데이터를 확인한다. 앞에 있는 데이터들과 하나씩 비교하면서 자신의 자리를 찾아나간다. 가장 작은 값이면 맨 앞까지 계속 이동한다. 혹은 자기보다 작은 데이터가 앞에 있으면 그 뒤쪽으로 데이터를 삽입한다. 2. 소스 코드 import random data_list = random.sample(range(100), 10) print(data_list) >>> [24, 62, 17, 81, 74, 55, 92, 93, 82, 53] 랜덤으로 정렬하기 위한 숫자 데이터 리스트를 생성한다. for i in range(1, len(data_list)): for j in range(i-1,-1,-1): if data_list[j] > data_list[j+1..
목차 Bithumb 거래소에서 가상자산의 데이터를 가져와보자. 0. 빗썸 API 연결하기 이전 글을 참고하여 자신의 빗썸 계정의 API KEY를 발급받도록 한다. [Bithumb API] 빗썸 API 자동매매 - 1 - API 신청 및 연결 [Bithumb API] 빗썸 API 자동매매 - 1 - API 신청 및 연결 요즘 주식 시장을 넘어 코인 시장에도 활기가 가득하다. 다양한 언어를 사용해서 거래소의 API와 연동하여 자동화된 거래를 수행할 수 있다. 당분간 빗썸의 API를 사용하여 자동매매를 구현하는 chancoding.tistory.com 1. 빗썸 API 연결하기 import pybithumb con_key = "81dd5f25e5daa70b2fff603901d2c09c" # 본인의 Connec..
요즘 주식 시장을 넘어 코인 시장에도 활기가 가득하다. 다양한 언어를 사용해서 거래소의 API와 연동하여 자동화된 거래를 수행할 수 있다. 당분간 빗썸의 API를 사용하여 자동매매를 구현하는 방법에 대해 알아보도록 하자. 1. 빗썸 홈페이지로 이동 오른쪽 위의 전체 메뉴를 펼쳐 "계정관리 - API관리 " 로 이동한다. 2. API 활성화 API 관리 페이지로 이동했다면, 다음과 같은 화면을 볼 수 있을 것이다. 1. API 활성화 항목 접근 API를 통해서 계좌를 완전하게 제어를 할 예정이라면 "전체 선택"을 한다. 활성화되지 않는 부분이 있으면, API를 통해서 제어할 수 없다. 혹은 실제 매매까지는 진행할 생각이 없다 OR 거래소 데이터만 조회하겠다면 필요한 부분만 활성화해도 상관없다. 2. IP ..
목차 다양한 링크드 리스트 구조 1. 더블 링크드 리스트 (Doubly linked list) 더블 링크드 리스트 기본 구조 이중 연결 리스트라고도 함 단방향 링크드리스트인 경우 가장 끝 노드를 찾기 위해서는 처음부터 끝까지 모든 노드를 지나서 검색해야하는 한계가 있다. 데이터가 뒷쪽에 더 가깝다는 것을 안다면 뒤에서부터 검색하면 더 빠르게 접근할 수 있다. 장점 : 양방향으로 연결되어 있어서 노드 탐색이 양쪽으로 모두 가능 단점 : 앞쪽 주소와 뒷쪽 주소를 모두 저장해야함. 저장 효율이 낮아진다. ![](https://www.fun-coding.org/00_Images/doublelinkedlist.png) (출처: wikipedia, https://en.wikipedia.org/wiki/Linked\..
목차 대표적인 데이터 구조: 링크드 리스트 (Linked List) 1. 링크드 리스트 (Linked List) 구조 연결 리스트라고도 함 배열은 순차적으로 연결된 공간에 데이터를 나열하는 데이터 구조 링크드 리스트는 떨어진 곳에 존재하는 데이터를 화살표로 연결해서 관리하는 데이터 구조 본래 C언어에서는 주요한 데이터 구조이지만, 파이썬은 리스트 타입이 링크드 리스트의 기능을 모두 지원 링크드 리스트 기본 구조와 용어 노드(Node): 데이터 저장 단위 (데이터 값, 포인터)로 구성 포인터(pointer): 각 노드 안에서, 다음이나 이전의 노드와의 연결 정보를 가지고 있는 공간 배열의 단점 배열의 경우 미리 데이터의 길이를 선언해야한다. 선언한 길이만큼 공간을 미리 차지하고 있다. 데이터가 인덱스에 따..
목차 꼭 알아둬야 할 자료 구조: 스택 (Stack) 데이터를 제한적으로 접근할 수 있는 구조 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조 가장 나중에 쌓은 데이터를 가장 먼저 빼낼 수 있는 데이터 구조 큐: FIFO 정책 스택: LIFO 정책 1. 스택 구조 스택은 LIFO(Last In, Fisrt Out) 또는 FILO(First In, Last Out) 데이터 관리 방식을 따름 LIFO: 마지막에 넣은 데이터를 가장 먼저 추출하는 데이터 관리 정책 FILO: 처음에 넣은 데이터를 가장 마지막에 추출하는 데이터 관리 정책 대표적인 스택의 활용 컴퓨터 내부의 프로세스 구조의 함수 동작 방식 주요 기능 push(): 데이터를 스택에 넣기 pop(): 데이터를 스택에서 꺼내기 Visualgo 사이트에서..