분류 전체보기 91

Delta Search (델타 탐색)

설명 2차 배열의 한 좌표에서 4방향(혹은 8방향 등 필요 요소)의 인접 배열 요소를 탐색하는 방법 예시 arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # 상하좌우 delta_row = [-1, 1, 0, 0] delta_col = [0, 0, -1, 1] # 상하좌우 한번에 할당 delta_row_col = [[-1, 0], [1, 0], [0, -1], [0, 1]] # 추가 - 대각선의 경우는? 좌상, 우상, 우하, 좌하 delta_diagonal = [[-1, -1], [-1, 1], [1, 1], [1, -1]] # 5(1, 1)의 위치를 기준 r = 1 c = 1 for i in range(4): next_row = r + delta_row[i] next_col = c..

Algorithm 2021.02.15

2-dimensional array iteration methods (2차원 배열 순회 방법 )

설명 배열 순회 : n X m 배열의 n * m개의 모든 원소를 빠짐없이 조사하는 방법 행 우선 순회, 열 우선 순회 등 다양한 방법 존재 예시 N : 행의 길이 M : 열의 길이 행 우선 순회 방식 for i in range(N): for j in range(M): print(arr[i][j]) # 역행 순회 for i in range(N): for j in range(M-1, -1, -1): print(arr[i][j]) 열 우선 순회 방식 for j in range(M): for i in range(N): print(arr[i][j]) # 역행 순회 for j in range(M): for i in range(N-1, -1, -1): print(arr[i][j]) 지그재그 순회 for i in ra..

Algorithm 2021.02.15

Greedy Algorithm (탐욕 알고리즘)

설명 탐욕 알고리즘은 최적해를 구하는 데 사용되는 근시안적인 방법 여러 경우 중 하나를 결정해야 할 때마다 그 순간에 최적이라고 생각되는 것을 선택해 나가는 방식으로 진행하여 최종적인 해답에 도달 각 선택의 시점에서 이루어지는 결정은 지역적으로는 최적이지만, 그것이 최종적인 해답으로 적합하다는 보장은 없음 일반적으로, 머릿속에 떠오르는 생각을 검증 없이 바로 구현하면 Greedy적인 접근 동작 과정 해 선택: 현재 상태에서 부분 문제의 최적 해를 구한 뒤, 이를 부분해 집합(Solution Set)에 추가 실행 가능성 검사: 새로운 부분해 집합이 실행 가능한지 확인 즉, 문제의 제약 조건 등을 위반하지 않는지를 검사 해 검사: 새로운 부분해 집합이 문제의 해가 되는지를 확인 아직 전체 문제의 해가 완성되..

Algorithm 2021.02.09

Exhaustive Search (완전 검색)

설명 완전 검색 방법은 문제의 해법으로 생각할 수 있는 모든 경우의 수를 나열해보고 확인하는 기법 Brute-force 혹은 generate-and-text 기법이라고도 불린다. 모든 경우의 수를 테스트한 후, 최종 해법을 도출 일반적으로 경우의 수가 상대적으로 작을 때 유용 알고리즘 학습 초기에는 완전 검색으로 시작! 모든 경우의 수를 생성하고 테스트하기 때문에 수행 속도는 느리지만, 해답을 찾아내지 못할 확률은 적음 평가 등에서 주어진 문제를 풀 때, 우선 완전 검색으로 접근하여 해답을 도출 성능 개선을 위해 다른 알고리즘을 사용하고 해답을 확인하는 것이 바람직한 접근

Algorithm 2021.02.09

Counting Sort (카운팅 정렬)

설명 항목들의 순서를 결정하기 위해 집합에 각 항목이 몇 개씩 있는지 세는 작업을 하여, 선형 시간에 정렬하는 효율적인 알고리즘 제한 사항 정수나 정수로 표현할 수 있는 자료에 대해서만 적용 가능 각 항목의 발생 횟수를 기록하기 위해, 정수 항목으로 인덱스 되는 카운트들의 배열을 사용 카운트들을 위한 충분한 공간을 할당하려면 집합 내의 가장 큰 정수를 알아야 함 시간 복잡도 $O(n+k)$ : n은 리스트의 길이, k는 정수의 최대값 예시 [0, 4, 1, 3, 1, 2, 4, 1]을 카운팅 정렬하는 과정 - 1단계: Data에서 각 항목들의 발생 횟수를 세고, 정수 항목들로 직접 인덱스 되는 카운트 배열 counts에 저장 - 2단계: 정렬된 집합에서 각 항목의 앞에 위치할 항목의 개수를 반영하기 위해..

Algorithm 2021.02.09

Bubble-sort (버블 정렬)

설명 인접한 두 개의 원소를 비교하며 자리를 계속 교환하는 방식 정렬과정 첫 번째 원소부터 인접한 원소끼리 계속 자리를 교환하면서 맨 마지막 자리까지 이동 한 단계가 끝나면 가장 큰 원소가 마지막 자리로 정렬 교환하며 자리를 이동하는 모습이 물 위에 올라오는 거품 모양과 같다고 하여 버블 정렬이라고 칭함 시간 복잡도 O($n^2$) 예시 [55, 7, 78, 12, 42]를 버블 정렬하는 과정 - 첫번째 패스 - 두번째 패스 - 세번째 패스 - 네번째 패스 - 정렬 끝 배열을 활용한 버블 정렬 앞선 과정을 코드로 구현하면 아래와 같다. arr = [55, 7, 78, 12, 42] def bubble_sort(array): # 정렬할 List for i in range(len(array) - 1, 0, ..

Algorithm 2021.02.08

Git 기초 명령어

Git 기본 명령어 git은 분산 버전 관리 시스템(DVCS)이다. (*DVSC = Distribute Version Control System)소스코드의 버전 및 이력을 관리할 수 있다. 1. 준비하기 윈도우에서 git을 활용하기 위해서는 git bash 를 설치해야한다. git을 활용하는 방식으로 GUI툴인 source tree, github desktop등을 활용 할 수도 있다. 초기설치를 완료한 이후에 컴퓨터에 author 정보를 입력한다. $ git config --global user.name '유저이름' $ git config --global user.email '유저이메일' # 확인하기 $ git config --global user.name > 유저 이름 $ ..

Git 2021.01.21

(Jupyter Notebook) 폰트 바꾸기 / Naver D2coding 폰트

Jupyter Notebook을 사용하다 보면 기본 폰트의 가독성이 떨어진다는 것을 느낀다. 숫자 1, 영어 소문자 l, 영어 대문자 I, 특수문자 | (shift+\)를 구분하기 어렵다. (현재 육안으로도 차이점이 거의 느껴지지 않는다.) 그래서 input과 output의 폰트를 바꿀 수 있는지 구글링하여 찾던 중 괜찮은 방법을 찾게 되어 기록하고자 한다. 폰트 : Naver/d2codingfont 폰트는 아래 링크를 통해서 설치할 수 있다. - https://www.github.com/naver/d2codingfont naver/d2codingfont D2 Coding 글꼴. Contribute to naver/d2codingfont development by creating an account on..

ETC 2020.09.21

(Mark Down) README.md 마크다운 작성법

코드를 설명하고 정리하는 방법 중 하나로 "마크다운"이라는 것을 알게 되었다. 이전에는 "주석"을 사용해서 코드에 설명을 추가하곤 했다. 하지만 더욱 깔끔한 코드 정리를 위해선 마크다운 작성이 필요하다. 특히 깃허브 README.md 파일을 통해 해당 리포지토리를 설명할 때, 마크다운을 깔끔하게 작성해야 가독성이 좋다. 그렇기에 마크다운의 정의에 대해서 알아보고 작성 문법에 대해서 기록하고자 한다. 마크다운 마크다운이란 일반 텍스트 기반의 경량 마크업 언어이다. 일반 텍스트로 서식이 있는 문서를 작성하는 데 사용되며, 일반 마크업 언어에 비해 문법이 쉽고 간단한 것이 특징이다. HTML과 리치 텍스트(RTF) 등 서식 문서로 쉽게 변환되기 때문에 응용 소프트웨어와 함께 배포되는 README 파일이나 온라..

ETC 2020.09.19

Google Colab과 Google BigQuery 연동하기

프로젝트를 진행하는 과정에서 데이터 적재 필요성을 느꼈다. 다양한 SQL 툴에 적재가 가능하지만, Google Cloud로 엮인 "Colab"과 "BigQuery"를 연동하고자 한다. 방법은 매우 간편하다. 1. 라이브러리 호출 from pandas.io import gbq 2. BigQuery 데이터 세트 및 테이블 만들기 다음과 같은 구색이 맞춰져 있어야 한다. "Project_id"를 눌러 화면 오른쪽의 "데이터 세트 만들기" "데이터세트"를 만든 후, 화면 오른쪽의 "테이블 만들기" (무료 계정은 BigQuery 사용에 제한이 있다. 하지만 나와 같은 초보자들이 사용하기엔 큰 문제없으니 괜찮다.) 3. Google Cloud API 연결, DataFrame 업로드 df.to_gbq(destinat..

ETC 2020.09.17