Front-end(170)
-
[알고리즘] 정렬 - 삽입 정렬(Insertion Sort) (자바스크립트/node.js/javascript/알고리즘)
삽입 정렬 삽입 정렬이란? 배열을 순차적으로 검색하면서 정렬되지 않은 항목들을 배열의 왼쪽의 정렬된 부분으로 이동시킨다. 동작 과정 예를 들어 [3, 7, 2, 5, 1, 4]의 배열을 오름차순으로 정리한다고 하면 첫번째 숫자는 놔두고 두번째 자리 숫자부터 뽑아서 그 숫자가 첫 숫자보다 크면 첫 숫자 오른쪽에, 작으면 왼쪽에 넣는다. 세번째 자리 숫자를 뽑아서 앞의 두 숫자와 크기를 비교해서 알맞은 자리에 넣는다. 이렇게 끝까지 계속 한다. 시간 복잡도 Worst Case: O(n^2): 정렬이 하나도 안되어있는 경우 Best Case: O(n): 이미 정렬이 되어있는 경우 공간 복잡도 O(1) 장점 메모리가 절약된다. (배열을 새로 만들 필요 없이 주어진 배열 안에서 정렬시키면 되기 때문, in pla..
2021.05.03 -
[알고리즘] 정렬 - 계수 정렬 (Counting Sort) (js/javascript/자바스크립트)
정렬 중에 그나마 빠른 힙정렬의 경우에도 시간복잡도 O(Nlog₂N)인데 계수정렬은 시간복잡도가 O(N)으로 굉장히 빠르다. 💥그러나 정렬해야할 수의 범위가 작을 때에만 유리하다는 것을 유의해야 한다 -> 정렬해야할 수가 0,100,2,10,1000 이라면 고작 5개의 수를 정렬하는데 0부터 1000까지 배열을 만들어야 하기 때문에 메모리가 낭비되고 반복문도 불필요하게 돌아야 한다. 방법은 간단하다. 정렬해야 할 수가 [5,2,3,1,4,2,3,5,1,7] 이라면 1. 주어진 원소들을 반복문으로 돌며 각 원소의 개수를 카운팅한다. 2. 카운팅한 개수만큼 원소들을 나열해준다. 이 때 각 원소의 개수를 카운팅 하기 위해서 원소 중에 가장 큰 수 + 1의 배열 array를 만들어서 모두 0으로 채워주고 (+1..
2021.04.30 -
[Javascript] primitive 변수와 object 변수의 차이점(자바스크립트/javascript/js)
변수 - primitive 타입과 object 타입 변수의 차이점 🍋 리액트를 공부할 때 PureComponent와 관련해서 shallow comparison 을 이해하기 위해 먼저 알아두어야 할 개념이다. 1. primitive(원시 타입) 변수 primitive(원시 타입) 변수 : number, string, boolean, null, undefined, symbol let number = 2; 이렇게 primitive 타입 변수는 변수를 선언함과 동시에 메모리에 공간이 생기게 되고 그 공간에 데이터가 적재되어진다. let number = 2; let number2 = number; console.log(number); // 2 console.log(number2); // 2 이렇게 number2 ..
2021.04.29 -
[백준] 2751. 수 정렬하기 2 (node.js/javascript/자바스크립트/정렬/힙정렬/알고리즘/코딩테스트)
내가 작성한 코드 (자바스크립트) let fs = require("fs"); let input = fs.readFileSync("/dev/stdin").toString().split("\n"); const size = Number(input[0]); class Heap { constructor() { this.items = []; } //swap swap(index1, index2) { let temp = this.items[index1]; this.items[index1] = this.items[index2]; this.items[index2] = temp; } //parentIndex parentIndex(index) { return Math.floor((index - 1) / 2); } //left..
2021.04.29 -
[백준] 1436. 영화감독 숌(node.js/javascript/자바스크립트/알고리즘/코딩테스트)
내가 작성한 코드 (자바스크립트) let fs = require("fs"); let input = fs.readFileSync("/dev/stdin").toString(); const N = Number(input); let current = 666; let count = 0; let answer; while (true) { if (String(current).includes("666")) { count++; if (count === N) { answer = current; break; } } current++; } console.log(answer); 666이 들어가는 숫자를 차례로 나열해보면, 666 - 1666 - 2666 - 3666 - 4666 - 5666 - 6660 - 6661 ... 이렇게..
2021.04.28 -
[백준] 1018. 체스판 다시 칠하기(node.js/javascript/자바스크립트/코딩테스트/브루트포스/완전탐색)
내가 작성한 코드 (자바스크립트) let fs = require("fs"); let input = fs.readFileSync("/dev/stdin").toString().split("\n"); const height = Number(input[0].split(" ")[0]); const width = Number(input[0].split(" ")[1]); const chessboard = []; let answer = 0; for (let i = 1; i { let count = 0; for (let w = i; w
2021.04.28