해시는 주소록 처럼 사용가능, 값에 대한 “해시 테이블”이 존재하고 테이블의 데이터를 “버킷”이라고 한다
사용분야 - 비밀번호 관리, 데이터베이스 인덱싱, 블록체인
Javascript에서는 Map, Set을 사용하여 해시를 이용한다.
재귀를 사용하여 동일한 작업을 하는 반복 루프를 만들어 원하는 결과값이 출력될때까지 재귀를 수행하도록 한다.
조합
https://velog.io/@rlatp1409/알고리즘-JS-순열과-조합-구현-자바스크립트
DFS(깊이 우선 탐색)
큐를 사용하여 정점(시작점) 넣는다.
시작점과 연결된 [ㄱ,ㄴ,ㄷ]에서 ㄱ을 빼고 ㄱ에 연결된 ㄹ를 맨 앞에 넣는다
[ㄹ,ㄴ,ㄷ]에서 위 행동을 반복하여 큐가 빌때까지 재귀 반복
BFS (너비 우선 탐색)
큐를 사용하여 정점(시작점) 넣는다.
시작점과 연결된 [ㄱ,ㄴ,ㄷ]에서 ㄱ을 빼고 ㄱ에 연결된 ㄹ를 맨 뒤에 넣는다
[ㄹ,ㄴ,ㄷ]에서 위 행동을 반복하여 큐가 빌때까지 재귀 반복
DFS, BFS 언제 사용?
DFS - 길의 형태 파악 가능, 경로의 특징 이용
BFS - 최단거리 구하기
https://velog.io/@sean2337/Algorithm-DFS와-BFS의-쉬운-개념-JavaScript-구현-방법
https://gyyeom.tistory.com/116
https://blog.naver.com/qpghnv/221580612451
let getGCD = (num1, num2) => {
let gcd = 1;
for(let i=2; i<=Math.min(num1, num2); i++){
if(num1 % i === 0 && num2 % i === 0){
gcd = i;
}
}
return gcd;
}
let getLCM = (num1, num2) =>{
let lcm = 1;
while(true){
if((lcm % num1 == 0) && (lcm % num2 == 0)){
break;
}
lcm++;
}
return lcm
}
유클리드 호제법을 이용한 구현
num1를 num2로 나눈 나머지를 r이라고 했을 때, GCD(num1, num2) = GCD(num2, r)과 같다는 것이다.
let getGCD = (num1, num2) => (num2 > 0 ? getGCD(num2, num1 % num2) : num1);
정리
https://velog.io/@devjade/JavaScript로-최대공약수GCD-최소공배수LCM-구하기
function solution(num1, num2) {
const gcd = (a, b) => a % b === 0 ? b : gcd(b, a % b);
const lcm = (a, b) => a * b / gcd(a, b);
return [gcd(num1, num2), lcm(num1, num2)];
}
Array.prototype.sort 정렬
https://velog.io/@kim-jaemin420/메서드Array.prototype.sort자바스크립트-정렬함수-sort