자바스크립트(16)
-
완전탐색 (Brute-Force)
| 완전탐색 완전탐색 (Brute-Force)는 알고리즘이라고 지칭하기는 어렵지만 문제를 해결할 때 필요한 순간이 오며 간단하지만 풀이에는 난이도가 있는 알고리즘이다. 모든 경우의 수를 전부 탐색하기에 무식한 풀이 기법이라는 소리도 있다. 유튜브에서 본 설명을 들었을 때 10억이 든 금고의 암호를 푼다고 한다면 4자리의 암호를 모든 경우에서 조합하여 금고의 암호를 풀것이다. 0000 -> 0001 -> 0002 이런 순서로 정답이 나올때 까지 시도를 할것이다. 여기서 느껴지는점은 완전탐색의 시간복잡도는 N의 크기에 따라 가진다. 이 방법은 간단하고 직관적이지만 경우의 수가 많아질수록 계산 시간이 급격하게 증가할 수 있다 | 완전탐색의 과정 1. 모든 경우의 수를 생성 2. 경우의 수 계산 3. 조건 충족..
2024.01.08 -
스택/큐 (Stack | Queue)
| 스택 (Stack) 스택은 LIFO (Last In Last Out) 즉 후입선출의 원칙으로 만들어진 자료구조이다. 주로 프링글스 통이 예시로 사용된다. 프링글스를 제조할 때 여러개의 감자칩을 하나하나 넣는다면 소비자의 입장에서는 제일 늦게 들어간 감자칩을 먼저 먹을것이다. 자바스크립트에서는 스택과 큐를 내장으로 지원하지 않는다. 스택은 배열로 구현하거나 Class를 만들어서 직접 구현할 수 있다. | Array(배열) 로 구현 배열의 내장함수인 push와 pop으로 구현할 수 있다. push는 배열의 마지막 요소 다음에 값을 추가한다. pop은 배열의 마지막 요소를 삭제한다. 그래서 LIFO 구조를 구현할 수 있는것이다. | Class 로 구현 Stack을 클래스화 해서 직접 구현할 수도 있다. ..
2023.12.18 -
해시 [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 -
[JS] Array.sort
| Array.sort 자바스크립트의 sort() 메서드는 배열의 요소를 적절한 위치에 정렬 한 이후 배열을 반환한다. 주의해야 할 점은 복사본이 만들어지는 것 이 아닌 원 배열이 정렬 된다. 로직에 따라 원본을 유지할 것인지 아니면 정렬 된 값을 반환만 하는 함수인지 꼭 구분 지어서 로직을 작성해야 한다. | Number 정렬 숫자를 정렬하면 내가 원하는 결과값이 안나온다. 그 이유는 sort 메소드의 기본 정렬 순서는 다음과 같다. - 문자열 유니코드(Unicode) 코드 포인트(code point) 에 따른다. - 배열의 모든 항목이 문자열로 변환된 이후 문자열의 유니코드 값이 선택된 다음에 정렬을 진행한다. 그래서 comparator function(선택적 함수)을 인자로 전달 해야 한다. | C..
2023.10.12 -
이진 검색 (Binary Search)
| 이진 검색 - Binary Search 이진 검색은 정렬된 배열의 중간점을 찾아가며 배열을 쪼개서 원하는 값을 찾아내는 검색 알고리즘이다. 시간 복잡도는 O(log n) 을 가지며 선형 검색 O(n) 보다 속도는 빠르다. 하지만 데이터가 정렬이 되어있어서 이진 검색을 사용 할 수 있다. 또한 데이터의 갯수가 적다면 선형검색이 더 효과적일 수 있다. 주의 할 점은 데이터는 무조건 분류 되어있어야 한다. 분류가 되어있지 않다면 이진 검색은 아무런 쓸모가 없다. 알고리즘은 친구들과 업앤다운 게임을 생각해보면 굉장히 이해하기 편하다. 1부터 50까지의 숫자를 맞추는 게임이며 정답은 27이다. 나는 23을 제시하고 친구는 23 보다 27이 높으니 "업" 이라고 외쳤다. 그러면 1부터 23은 필요없는 숫자가 되..
2023.10.11