[알고리즘] 최단 경로 알고리즘 - JavaScript
·
알고리즘/풀이 힌트
최단 경로 알고리즘? 그래프에서 특정 정점에서 목적지까지 최단 경로를 구하는 알고리즘이다. 대표적인 최단 경로 알고리즘은 다음과 같다. DFS 다익스트라 벨만-포드 플로이드 와샬 목적에 따라 알고리즘을 선택할 수 있다. BFS, DFS 그래프의 간선 가중치가 모두 같을 때 적합하다. 2차원 배열로 구성된 지도에서 최단 거리를 찾아야 한다면 BFS, DFS로 푸는 경우가 많다. 다익스트라 알고리즘 그래프의 간선 가중치가 각각 다른 경우 적합하다. 우선 큐를 이용해서 만들 수 있으며, 시간 복잡도는 V가 정점의 수, E가 간선의 수라면 O(E log V) 이다. 작동 방법 1. 시작점을 제외한 모든 정점의 거리를 무한으로 설정한다. 시작은 0 2. 시작점을 선택한다. 3. 선택한 정점에서 갈 수 있는 정점의..
[알고리즘] 큰 수 만들기
·
알고리즘
들어가며 그리디 - JavaScript를 먼저 공부한 다음 푼 문제입니다. 바로 풀리지 않거나 설명이 필요하다면 참고하는 것을 추천드립니다. 문제 설명 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다. 문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요. 제한조건 number는 2자리 이상, 1,000,000자리 이..
[알고리즘] 그리디 - JavaScript
·
알고리즘/풀이 힌트
그리디? 매 선택에서 지금 순간 가장 최적인 답을 선택하는 알고리즘이다. A에서 F로 이동할 때 전체 코스트로만 본다면 D로 가는 것이 더 빠르다. 하지만 그리디를 적용한다면 A 의 시점으로만 봤을 때는 B로 가는 것이 더 빠르기 때문에 B로 이동하게 된다. 이처럼 현재 시점의 최적의 답은 선택하지만 이것이 최적의 결과를 보장하지는 않는다. 그리디의 특징 보통 최적의 결과를 구하는 알고리즘보다 빠른 경우가 많다. 크루스칼, 다익스트라 알고리즘 등에 사용된다. 직관적인 문제를 풀 때 적합하다. 사용되는 방식 동전 반환 문제로, 큰 단위인 지폐, 동전 순으로 거스름돈을 만들 때 사용한다. 1860원을 먼저 가장 큰 단위인 1000원짜리 지폐로, 그 후 500원, 100원, 50원, 10원 순으로 구하면 빠르..
메모리
·
개발정보
프로그램(프로세스)이(가) 실행되면 OS는 메모리에 공간을 할당해준다. 공간을 할당하는 것이지 메모리 전체의 영역이 Code, Data, Heap, Stack 으로 이루어진 것이 아닌 일정 공간을 4가지로 나누는 것이다. 메모리 영역을 크게 정적인 영역과 동적인 영역으로 나눠보았다. 정적인 영역 프로그램이 시작할 때 할당되고, 프로그램이 종료되면 소멸한다. 코드 영역 실행할 프로그램의 코드 즉, 소스코드가 저장되는 영역. 다른 이름으로 텍스트 영역이라고 부르기도 한다. CPU가 코드 영역에서 저장된 명령을 하나씩 가져가서 처리하게 된다. ※ JVM, Node or 브라우저에서는 TEXT 영역 X 데이터 영역 전역 변수와 정적 변수가 저장되는 영역 3가지로 나뉜다. Read-Only : const, fin..
힙 메모리 단편화
·
개발정보
메모리 단편화? 내부 단편화와 외부 단편화로 나뉜다. 내부 단편화 프로세스에서 필요로 하는 메모리의 양보다 더 많이 할당된 것을 말한다. 20mb만 필요한 메모리가 30mb가 할당된다면 10mb의 내부 단편화가 발생한다. 외부 단편화 메모리를 할당하고 난 다음에 작은 크기의 조각들이 남아서 사용할 수 없는 공간이 많아지는 것을 말한다. 해결방법으론 크게 3가지가 있다. 1. 페이징 2. 세그멘테이션 3. 메모리 풀 페이징 ? 가상 메모리를 사용한다. 사용하지 않는 프레임을 페이지에 옮기고, 필요한 메모리를 페이지 단위로 프레임에 옮기는 방법. 페이징 기법을 사용하면 외부 단편화 문제는 해결할 수 있지만 페이지 단위를 작게 하지 않는 이상 내부 단편화는 해결하지 못한다. ※ 페이지 ? 보조기억장치를 이용한..
[JavaScript] 콘솔로 입력받기
·
JavaScript
자바스크립트를 하면 콘솔로 입력 받을 경우가 많지는 않다. ( 아닐수도 있지만 본인이 느끼기엔 ㅋㅋ ) 막상 필요해서 어떤 방식으로 구현할까 고민하던 중에 readline 이라는 패키지를 찾았다. const readline = require('readline'); const rl = redline.createInterface({ input: process.stdin, output: process.stdout }); rl.question('What do you think of Node.js? ', (answer) => { console.log(`Thank you for your valueable feedback: ${answer}`); rl.close(); }); 간단하게 콘솔을 통해서 데이터를 입력 받을..
Github 동작 원리
·
개발정보
개발자라면 당연히 자주 사용하게 될 Github인데, “ Github는 어떤 방식으로 동작을 하는 것일까? “ 라는 고민을 하였다. Git 프로젝트는 원격 저장소를 포함해서 4가지 요소로 나누어진다. Working Directory Local Repository Staging Area Remote Repository Working Directory 간단하게 말하면 로컬 환경에서의 작업 파일이다. Local Repository Working Directory에 있는 .git 폴더이다. git add, git commit 을 하면 .git 폴더 안의 데이터들과 해시를 담고 있는 파일이 수정된다. 여기서 수정되는 내용이 커밋을 통해 수정되는 내역이다. Staging Area .get, 즉 Local Repos..
객체 정렬하기
·
JavaScript
코딩을 하다보면 빈번하게 객체를 정리 해야하는 경우를 만나게 된다. 배열의 경우엔 Sort 함수를 사용하면 되지만 객체의 경우엔 몇 가지 제약이 있다. 기본적으로 Object를 저장형 데이터로 사용할 경우에는 Object를 사용하기 보단 Map을 사용하는 것이 좋다. 어쩔수 없이 Object를 사용하는데 정렬이 필요할 때 참고 바랍니다! 다양한 해결 방법이 있었는데, 그중 하나를 정리한다. let object = { a : 20, b : 30, c : 40, d : 35, } 형식의 객체가 있다고 했을 때 Value를 기준으로 정리하는 방식이다. const sortObject = []; for(const item in object) { sortObject.push([item, object[item]]);..