일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- kakao map api
- MUI
- 정규표현식
- 프론트엔드
- 자료구조
- sort
- 코드스테이츠 메인프로젝트
- nodejs
- 페이지네이션
- 배열
- 자바스크립트
- 코드스테이츠
- 알고리즘
- 코딩테스트
- JavaScript Deep Dive
- 유데미
- CSS
- Node js
- next/Image
- 재귀함수
- 이벤트 루프
- Native select
- 버블정렬
- 백준 nodeJS
- OSI 7계층
- primitive type
- javascript
- input class
- react js
- 백준
- Today
- Total
목록알고리즘 (19)
신입 개발자에서 시니어 개발자가 되기까지
문제 월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다. 예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다. 노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총 비용(=고정비용+가변비용)보다 많아지게 된다. 최초로 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다. A, B, C가 주어졌..
문제 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자. 입력 첫째 줄에 N이 주어진다. 둘째 줄에는 공백 한 칸으로 구분된 X1, X2, ..., XN이 주어진다. 출력 첫째 줄에 X'1, X'2, ..., X'N을 공백 한 칸으로 구분해서 출력한다. 코드 const input = require("fs").readFileSync("example.txt").toString().trim(); const..
배열이 아닌 숫자데이터를 정렬하는 문제. 실버 5라고 되어있긴 한데 난이도는 낮다. const input = require("fs").readFileSync("example.txt").toString().trim(); const array = input .split("") .map(Number) .sort((a, b) => b - a); console.log(array.join(""));

1. 단일 연결리스트와 차이점 a. Node에 next외에도 prev 프로퍼티가 있다. b. 장점 i. pop 메서드가 훨씬 효율적으로 이루어진다. ii. reverse가 쉽다. c. 단점 i. 메모리가 단일 연결 리스트보다 더 든다. 2. 이중연결리스트의 Big O a. 삽입 : O(1) b. 제거 : O(1) c. 검색 : O(N) d. 접근 : O(N) 3. Node 클래스, 이중연결리스트 클래스 생성 class Node { constructor(val) { this.val = val; this.next = null; this.prev = null; } } class DoublyLinkedList { constructor() { this.head = null; this.tail = null; thi..
오름차순 정렬. 혹시나해서 기본 내장 메서드로 풀어봤는데 틀리길래 버블정렬로 풀었다. const notSorted = require("fs") .readFileSync("/dev/stdin") .toString() .trim() .split("\n"); let arr = notSorted.splice(1).map(Number); function swap(array, idx1, idx2) { [array[idx1], array[idx2]] = [array[idx2], array[idx1]]; } for (let i = 0; i i; j--) { if (arr[j] < arr[j - 1]) { swap(arr, ..
1. 로직 a. 합병정렬과 마찬가지로 한 개 이하의 요소를 지닌 배열들이 항상 정렬되어 있다는 것을 이용한다. b. 피벗포인트(pivot)라고 불리는 하나의 요소를 선택하고 이 요소를 기준으로 더 작은 수는 왼쪽, 큰 수는 오른쪽으로 나눈다. 이 때, pivot은 정렬되어 있다.(올바른 위치에 있음). c. 2번의 과정을 왼쪽, 오른쪽에서 다시 반복한다. 2. 피벗 helper 함수 의사코드 a. 배열, start index, end index 이 세 가지를 파라미터로 함수를 작성한다. 기본값은 start는 0, end는 array.length -1 b. 배열의 첫번째를 피벗으로 선택(이건 배열 끝, 중간 혹은 랜덤으로 정할수도 있다.) c. 현재의 피벗 인덱스를 변수로 저장.(마지막까지 피벗의 위치를 ..

1. 개념 a. 정수의 자리수를 이용하여 각 요소간 비교를 하지 않고 요소들을 정렬한다. b. 참고로 이때까지 공부했던 정렬들은 모두 비교 정렬이다. 비교 정렬의 최상의 케이스에서 시간복잡도는 O(n log n)이다. 기수정렬은 비교를 하지 않으므로 속도가 매우 빠르다(시간복잡도: O(log n) ) 2. 로직(getDigit) a. 자릿수 별로 숫자 알아내기(getDigit) i. 숫자를 받아서 문자열로 변환 후 각 인덱스 별로 버킷으로 구분하기. 문자열의 인덱스가 앞에서부터 시작하는 게 문제. =>음수 인덱스 사용해서 해결할 수는 있다. 또한 문자열을 다시 숫자로 바꿔줘야 한다. ii. 또는 10진수임을 활용해 10, 10^2, 10^3 등으로 나누어가면서 계산해서 구하는 방법이 있다.b. 가장 큰 ..
1. 개념 - 버블,삽입,선택정렬에 비해서 매우매우 효율적인 정렬. - 분할, 정렬, 합병의 조합으로 이루어져있다. a. 분할 : 배열을 분할하여 새로운 배열을 만드는데, 배열의 요소가 1개가 될 때까지 배열을 분할한다. length가 8인 배열을 분할하면 8개의 배열이 나와야 한다. b. 정렬과 합병 : 이제 8개로 분할된 배열을 2개씩 합병하는데, 정렬을 시킨다. 마찬가지로 2개씩 합병된 배열을 다시 정렬하면서 4개씩 합병한다. 마지막으로 8개의 요소가 정렬된 하나의 배열로 합병한다. -----------------2. 합병 알고리즘 a. 두 정렬된 배열을 합치는 함수를 만든다.(정렬은 오름차순이든 내림차순이든 통일되어야 한다.) b. 정렬된 두 배열이 주어지면, 함수는 정렬된 새로운 배열을 반환해야..