알고리즘 1일차 문제풀때 사용했던 메소드 정리 > for of 문법 : for (const element of array){ console.log(element) } array가 조립된 로봇이라면 element는 팔 다리 얼굴 몸통 각각의 구성품임 배열 , 스트링 순회할때 사용했다. 기초적인 문제에서 너무 많이 사용해서 무슨 문제가 주어질때 이걸로만...
요즘 공부를 쭉 하면서 느낀건 처음부터 혼자 힘으로 하려고 해봤자 안되는게 분명히 있다. 그래서 풀이를 보고 이해하는 쪽으로 공부 방법을 돌렸다. 문제 풀면서 풀이를 볼 때 중점적으로 봐야할 부분 > 문제에 어떤 식으로 접근을 하는지 > 전체적인 구조를 어떻게 잡아나가는지 이게 점차 가능해지면 이런 생각이 든다. > 이후에 어떻게 줄일 수 있는...
오늘 사용한 메소드 > Math.max(1,2,3,4,5,6) : 인수 중에서 가장 큰 수를 반환한다. 6 > Math.min(1,2,3,4,5,6) : 인수 중 가장 작은 수를 반환한다. 1 이중포문 안에서의 문법 > arri i는 0인채로 j가 순회 i가 0일 때의 순회가 이루어지면 0 0 0 0 이런 식으로 i + 1 하고 또 j 순회 ...
문자열 뒤집기 let name = "윤건호"; let reverse = name.split("").reverse().join(""); console.log(reverse); > "호건윤" > split(배열) > reverse(뒤집기) > join(문자열) 숫자를 공백으로 치환 let str = 'g1en2T3s8eSoft'; str = str....
사고력 강제로 키우기 포문 역으로 돌리기 for (let i = s.length - 1; i >= 0; i--) > let arr = [32, 55, 62, 20, 250, 370, 200, 3, 100]; 배열 뒤집기 타입을 알고 뒤집기 Number(toString > split() > reverse > join()) > 뒤집는 방법 1 ...
제곱근 소수 구하기 > 핵심 : 제곱근까지만 구하기 > function isPrime(num) { if (num === 1) return false; for (let i = 2; i if (num === 1) return false; > 1은 소수가 아니라 약수가 없는 유일한 자연수이기 때문에 처음에 구분하는 로직을 작성해준다. 1이 들...
Sort let product =[[6,3], [6,1], [10,3], [2,5]] > a,b 비교 더 작은걸 앞에 써주기 (오름차순) > product.sort((a, b) => a[0] + a[1] - (b[0] + b[1])); 헷갈리는 부분은 항상 a[0] 인덱스 식으로 써주기 때문에 어지러웠지만 사실 a[0] = 1이고 , a[1] = ...
let tmp = new Set() 생성자 함수 써주고 Set이라는 자료구조를 할당해준다. > Set의 쓰임 25라는 값을 10번 넣어도 25 한번만 받는다. 즉 , 중복을 제거해준다 Set의 형태는 객체 형태이다. set.add() set에 값을 추가하려면 .add() (여기에 넣고 싶은 값을 넣는다.) > Array.from() > 유...
해쉬 테이블 시간 복잡도 O(1) 같은 해쉬에 중첩될 경우 (collison) 이라고 부르는 이 경우가 많을 경우 최대 시간 복잡도가 O(n) 까지 증가할 수 있다 해결 방법 : 하나의 배열을 또 만들어서 둘 다 저장함, 이땐 선형 검색 O(n) 항상 O(1)의 시간복잡도를 가진건 아니지만 일반적인 기준을 생각했을 때 시간복잡도는 O(1) 이라...
Map > 셋과 비슷하지만 키와 값을 가진다. (셋은 키만 가지는 자료구조이다.) 하나의 맵 안에 두개 이상의 키가 존재하면 안된다. 값은 상관없다. 해시 테이블 검색하고자 하는 키 값을 입력받아서 해시함수를 돌려서 반환받은 해시코드를 배열의 인덱스로 환산을 해서 데이터 접근하는 방식의 자료구조이다 해시 테이블이 빠른 이유 > 해시 함수를 통...
맵 메소드 > new Map() – 맵을 만듭니다. > map.set(key, value) – key를 이용해 value를 저장합니다. > map.get(key) – key에 해당하는 값을 반환합니다. key가 존재하지 않으면 undefined를 반환합니다. > map.has(key) – key가 존재하면 true, 존재하지 않으면 false를 반...
오늘은 3일에 거쳐 벽 느꼈던 알고리즘과 코드에 대해 하나하나 뜯어서 소개 / 정리 해보고자 한다. 이해하려다 외워버려서 다 외운 줄 알고 작성했다가 420 번째 도전만에 에러없이 원하는 값이 출력되었다. 우선 사용한 알고리즘은 > 투 포인트 알고리즘 , 해시 맵 , 슬라이딩 윈도우 정도 된다. 작성 순서와는 별개로 코드 보는 우선 순위를 앞에 적...
스택 > 스택은 컴퓨터 공학에서 가장 기본이 되는 자료구조이다. 특징 스택은 늦게 들어온 친구가 먼저 나가는 형태로 구성이 된다. (Last In first out) 스택이 지원하는 4가지 기능 > pop() 맨 마지막에 넣은 데이터를 가져오면서 지우는 것 > push() 새로운 데이터를 맨 위에 한개 더 쌓아올리는 것 > peek() 맨 마지...
Queue ? > 먼저 집어넣은 데이터를 먼저 꺼내는 구조의 자료공간이다. > First in Last out라고 해서 FILO 라고 들어봤을 것이다. 자바스크립트 - 큐 배열 메서드의 push() , shift() 를 가지고 큐처럼 사용할 수 있다. 공식문서왈 -- > push() push() 메서드는 배열의 끝에 하나 이상의 요소를 추가하고...
선택 정렬 > 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복합니다. 시간복잡도는 일반적으로 이중 포문을 사용하기 때문에 O(N^2) 으로 볼 수 있다. 시간복잡도만 봐도 알 수 있듯이 그다지 효율적인 정렬 알고리즘은 아닌 것 같다. 간단한 코드를 보자면 > idx = i 의 값을 넣고 j 포문이 돌...
삽입 정렬 앞에 설명한 버블 정렬 , 선택 정렬과 같이 시간 복잡도가 O(N^2)에 속하지만, > 필요할 때만 위치를 바꾸기 때문에 앞에 소개한 정렬 방식들에 비하면 조금은 빠른 편이다. 일단 코드를 가지고 와서 하나하나 뜯어보고 동작을 정리하려한다. > function solution(arr) { let answer = arr; > for...
LRU Cache 이란 ? 여기서의 캐시에는 최대 저장공간이 있다 정해놓은 max_size 보다 cache 가 크다면 overflow 가 발생한다. 여기서 캐시 오버 플로우가 발생할 때 데이터를 지워주는 규칙이 있는데 기본적으로는 가장 오래된 데이터를 지우지만, 정확히는 가장 오래 전에 사용된 데이터를 지운다. 이러한 규칙을 LRU(페이지 교...
이전 소개한 LRU Cache를 삽입 정렬식으로 구현했다. 가장 최근에 사용한 데이터가 맨 앞의 저장 공간에 자리를 차지하고 가장 나중에 사용한 데이터가 뒤로 가는 구조이다. 이때 기존에 정해진 캐시 사이즈를 넘어가게 되면(overflow) 가장 뒤에 있는 데이터가 밀려나서 삭제되는 식의 자료구조이다. 역시나 알고리즘 자체를 이해하는 것과 실제 적...
sort를 이용한 좌표 정렬 (아주 간단한 정도) 주어진 좌표를 정렬하는데 정렬 기준은 x값을 우선으로 한다. x값이 같을 시 y값을 기준으로 한다. > if (a[0] === b[0]) return a[1] - a[1]; 0번째 인덱스 = x x 가 같으면 y가 기준이 되는 코드이다. > else return a[0] - a[0]; 아니라면 ...
회의실 배정 문제 > 한 개의 회의실이 있고 그 회의실을 시간대를 나눠서 사용할 수 있는 최대 경우의 수는 몇개인가? > 끝나는 시간과 시작하는 시간이 동일해도 사용 가능하다 > meeting.sort((a, b) => { if (a[1] === b[1]) return a[0] - b[0]; else return a[1] - b[1]...