자료구조와 알고리즘 3

JavaScript 배열의 특징과 내장 메소드 시간 복잡도 알아보기

포스팅 목적 JavaScript 내장 배열 메소드 한눈에 보기 위 포스팅에서 알아본 JavaScript 내장 배열 메소드들의 시간 복잡도, 그리고 이와 관련이 있는 JavaScript 배열의 특징까지 알아봅니다. 시간 복잡도 초기화 fill, splice : O(n) 요소 추가 / 제거 pop / push : O(1) shift / unshift : O(n) 정렬 sort : O(n log n) reverse 순회 forEach, map, reduce, reduceRight : O(n) 조건 판단 every, some, includes, filter : O(n) 요소 찾기 find / findIndex, indexOf / lastIndexOf : O(n) 문자열 반환 join, toString 새로운 배..

[알고리즘] 이진 탐색 ( Binary Search )

포스팅 목적 효율적인 탐색 알고리즘 중 하나인 이진 탐색을 코드 구현을 중심으로 알아봅니다. 이진 탐색의 정의 이진 탐색이란 데이터가 정렬되어 있는 배열에서 특정한 값을 찾아내는 알고리즘입니다. 예를 들어 특정 범위에 있는 숫자를 맞추는 UP & DOWN 게임을 할 때를 생각해 보면 가장 안정적이고 빠르게 답을 찾는 방법은 가장 한 숫자 범위 내에 있는 수 중에서 중간에 있는 숫자를 찍어서 그 숫자보다 큰지 작은지에 따라 다음 숫자를 결정하는 것 입니다. 이것이 이진 탐색입니다. 이진 탐색의 장단점 이진 탐색의 장점은 높은 효율성 입니다. 한 번 탐색할때 마다 탐색의 범위가 절반으로 줄어들기 때문에 시간 복잡도는 O(log N) 입니다. 앞의 정의에 나왔듯이 이진 탐색은 정렬되어 있는 배열에서만 사용할 ..

[알고리즘] 완전 탐색

포스팅 목적 알고리즘의 유형 중 완전 탐색 기법과 그 유형에는 어떤 것이 있는지 알아봅니다. 완전 탐색이란? 완전 탐색(Exhaustive Search)이란 가능한 경우의 수를 모두 확인하는 방법으로, 무식하게 푼다는 뜻의 Brute-Force 라고도 합니다. 완전 탐색 기법 완전 탐색 기법을 사용하기 위해서는 가능한 경우의 수를 중복 없이 모두 확인할 수 있는 순회 방법들을 사용합니다. 단순한 중첩 for 문 : 순회하는데 별다른 기법 없이 모든 경우를 셀 수 있을 때 사용합니다. 재귀 함수 : 순열 (permutation), 조합 (combination) 과 같이 반복적인 작업을 구현할 때 사용합니다. 2^n 경우의 수 : 개수의 제한 없이 포함이나 선택 여부를 판단해야할 때 사용합니다. 완전 탐색 ..