javascript(5)
-
완전탐색 (Brute-Force)
| 완전탐색 완전탐색 (Brute-Force)는 알고리즘이라고 지칭하기는 어렵지만 문제를 해결할 때 필요한 순간이 오며 간단하지만 풀이에는 난이도가 있는 알고리즘이다. 모든 경우의 수를 전부 탐색하기에 무식한 풀이 기법이라는 소리도 있다. 유튜브에서 본 설명을 들었을 때 10억이 든 금고의 암호를 푼다고 한다면 4자리의 암호를 모든 경우에서 조합하여 금고의 암호를 풀것이다. 0000 -> 0001 -> 0002 이런 순서로 정답이 나올때 까지 시도를 할것이다. 여기서 느껴지는점은 완전탐색의 시간복잡도는 N의 크기에 따라 가진다. 이 방법은 간단하고 직관적이지만 경우의 수가 많아질수록 계산 시간이 급격하게 증가할 수 있다 | 완전탐색의 과정 1. 모든 경우의 수를 생성 2. 경우의 수 계산 3. 조건 충족..
2024.01.08 -
해시 [Hash]
| 해시 테이블 이란? 해시는 유일한 값을 저장하기 위한 자료구조이다. key-value 를 저장하기 위해 사용된다. 배열과는 다르게 순서를 가지지 않으며 거의 모든 언어에서 해시라는 구조가 사용된다. 그 이유는 값을 찾는데에 상당히 빠른 시간으로 처리할 수 있다. 기존 자료구조인 이진탐색트리 / 배열 에 비해 빠른 속도를 가진다. Python 에서는 Dictionaries 가 있으며 JavaScript는 Objects / Maps 로 해시 테이블을 구현할 수 있다. 배열을 사용하여 값을 저장하고 그 값을 사용해야 할 때 우리는 해당 값을 가지고 있는 순서 즉 index를 알아야 한다. 하지만 해시는 내가 지정한 key로 원하는 값을 추출할 수 있다. | 직접 주소 테이블 (Direct Address T..
2023.12.12 -
버블 정렬 (Bubble Sort)
| 버블 정렬 버블 정렬은 오름차순을 예로 들었을 때 가장 작은 숫자와 바로 옆인 큰 숫자를 비교하며 위치를 바꿔주는 알고리즘이다. 더 큰 숫자가 한번에 하나씩 이동한다. 이 알고리즘은 제일 큰 숫자를 맨 뒤로 이동 시키며 정렬을 한다. | 작동 원리 0번째 부터 loop를 실행하고 첫 순서는 14와 21을 비교한다. 14는 21보다 크지 않음으로 위치를 바꾸지 않고 21과 37을 비교한다. 21 또한 37보다 크지 않음으로 위치를 유지한다. 그리고 37과 5를 비교한다. 37을 5보다 큼 으로 위치를 바꿔준다. 계속해서 이런 방식으로 진행 하다 보면 첫번째 loop 이후 마지막 숫자가 정해진다. 그리고 계속해서 똑같은 작업을 반복한다. 반복 이후 이렇게 오름차순 으로 정렬 된다. | 버블 정렬 구현 [..
2023.11.09 -
이진 검색 (Binary Search)
| 이진 검색 - Binary Search 이진 검색은 정렬된 배열의 중간점을 찾아가며 배열을 쪼개서 원하는 값을 찾아내는 검색 알고리즘이다. 시간 복잡도는 O(log n) 을 가지며 선형 검색 O(n) 보다 속도는 빠르다. 하지만 데이터가 정렬이 되어있어서 이진 검색을 사용 할 수 있다. 또한 데이터의 갯수가 적다면 선형검색이 더 효과적일 수 있다. 주의 할 점은 데이터는 무조건 분류 되어있어야 한다. 분류가 되어있지 않다면 이진 검색은 아무런 쓸모가 없다. 알고리즘은 친구들과 업앤다운 게임을 생각해보면 굉장히 이해하기 편하다. 1부터 50까지의 숫자를 맞추는 게임이며 정답은 27이다. 나는 23을 제시하고 친구는 23 보다 27이 높으니 "업" 이라고 외쳤다. 그러면 1부터 23은 필요없는 숫자가 되..
2023.10.11 -
재귀함수 (recursion)
| 재귀함수란? 함수가 자기자신을 다시 호출하는 구조로 만들어진 함수이다. 반드시 종료시점 (return 문) 이 존재해야 한다. 종료점이 없다면 계속해서 스택에 함수가 추가 된다. 그로 인해 메모리 사용량이 불필요하게 많이 소모되며 스택오버플로우가 발생할 수 있다. 두가지를 이해하고 넘어가면 재귀함수를 조금 더 쉽게 이해 할 수 있다. - base case (재귀의 탈출 조건) - recursive case (자기 자신을 호출) | 기본적인 재귀 함수 예시 recursionTest 함수에 인자로 넘어온 num을 하나씩 줄여가는 함수이다. 여기서 base case 조건은 num이 0보다 작거나 같을 때 return 으로 0을 뱉어준다. | for문으로 동일한 기능 구현 모든 재귀함수는 반복문으로 동일한 ..
2023.10.09