2021/04(62)
-
[알고리즘] 정렬 - 계수 정렬 (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 -
[백준] 2231. 분해합 (브루트포스 알고리즘/완전탐색/자바스크립트/node.js/javascript/알고리즘/코딩테스트)
[백준] 2231. 분해합 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 2 초 192 MB 46347 22149 17735 47.722% 문제 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다. 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 출력 첫째 줄에..
2021.04.27