본문 바로가기

분류 전체보기502

Advanced Algorithm - MST(Improved Prim's Algorithm)(6) 1. 개선된 프림 알고리즘이란? - 기존의 프림 알고리즘에서 파생된 알고리즘으로, 개선된 프림 알고리즘은 간선이 아닌 노드를 중심으로 우선순위 큐를 적용하는 방식이다. 그렇다면 무엇이 개선되었을까? - 이전 포스팅에서 다뤘던 기본적인 프림 알고리즘은 간선을 기준으로, 간선의 개수에 따른 while문의 반복회수를 측정하여 E log E 만큼의 시간복잡도를 갖는다. - 이와는 다르게, 개선된 프림 알고리즘은 노드를 기준으로 하여 E log V 만큼의 시간복잡도를 갖는다. 그래프는 노드의 수 보다 간선의 수가 더 많기 때문에 그 차이만큼 반복회수가 줄어들어 알고리즘의 시간복잡도가 개선됨을 의미한다. 2. 개선된 프림 알고리즘의 로직 - 개선된 프림 알고리즘은 노드마다 key값을 갖고 있는 것이 특징이다. 로직.. 2020. 10. 4.
Vanilla JS - DOM(Document Object Model)(1) 1. DOM, DOM조작이란 무엇인가? - JS를 이용해 HTML에 접근하여 문서 구조, 스타일, 내용, 속성 등을 변경하는 방법 - 선택자를 이용해 특정 엘리먼트를 지정할 수 있으며, 지정된 엘리먼트를 객체로 만든다. - 더 자세한 내용은 아래 링크를 참고하자. developer.mozilla.org/ko/docs/Web/API/Document_Object_Model/%EC%86%8C%EA%B0%9C DOM 소개 이 문서는 DOM에 대한 개념을 간략하게 소개하는 문서이다: DOM 이 무엇이며, 그것이 어떻게 HTML, XML 문서들을 위한 구조를 제공하는지, 어떻게 DOM 에 접근하는지, API 가 어떻게 사용되는지에 대한 developer.mozilla.org 2. 어떻게 사용하는가? - 아래와 같은.. 2020. 10. 3.
Advanced Algorithm - MST(Prim's Algorithm)(5) 1. 프림 알고리즘 코드구현 a) 기본그래프 구현 - 중복된 간선 정보를 제거한다. ex) (7, 'A', 'B')와 (7, 'B', 'A')는 동일하다. myedges = [ (7, 'A', 'B'), (5, 'A', 'D'), (8, 'B', 'C'), (9, 'B', 'D'), (7, 'B', 'E'), (5, 'C', 'E'), (7, 'D', 'E'), (6, 'D', 'F'), (8, 'E', 'F'), (9, 'E', 'G'), (11, 'F', 'G') ] b) 프림 알고리즘 로직구현 1. 그래프의 모든 간선정보를 저장한다. (adjacent_edges) 2. 임의의 노드를 선택하여 '연결된 노드 집합' 이라는 리스트에 삽입한다. (connected_nodes) 3. 2단계에서 선택된 노드.. 2020. 10. 3.
Advanced Algorithm - MST(Prim's Algorithm)(4) 1. 프림 알고리즘이란? - 대표적인 최소신장 알고리즘 중 하나이다.(Kruskal's Algorithm & Prim's Algorithm) a) 크루스칼 알고리즘과 프림 알고리즘의 비교 크루스칼 알고리즘은 전체 간선을 가중치 기준으로 오름차순 정렬하여, 낮은 가중치를 가진 간선이면서 동시에 사이클이 발생하지 않는 노드를 연결시켜 MST(최소신장트리)를 구하는 알고리즘이다. 프림 알고리즘은 어떤 노드와 인접한 노드의 간선만을 대상으로 하여, 인접노드 중에서 간선의 가중치가 가장 작은 간선을 선택하여 해당 인접노드를 연결하는 방식으로 MST를 구한다. 두 알고리즘 모두 탐욕 알고리즘을 기반하고 있다.(당장을 위한 최소비용을 선택하여 결과적으로 최적의 솔루션을 찾음) b) 프림 알고리즘의 로직 임의의 노드를.. 2020. 10. 2.
Vanilla JS - 기본문법(2) 1. JS 함수와 객체의 관계 - 프로그래밍에서 함수란, 어떤 기능을 의미한다. 그리고 해당 기능을 구현하기 위해서 어떤 코드의 집합으로 구성되어있다. - 이전 포스팅에서 출력을 위해 사용했던, console.log()에서 log라는 부분이 하나의 함수이다. 그렇다면 앞부분에 있는 console이라는 것은 무엇인가? - 저번 포스팅에서 객체가 갖고 있는 특정 key의 value를 출력하기 위해서 다음과 같은 코드를 사용했다. const myInfo = { name: "abc", location: "Seoul, Korea", gender: "Male", handsome:"true", favFood: [ { name: "Kimchi", healthy: true }, { name: "Hamburger", he.. 2020. 10. 2.
Vanilla JS - 기본문법(1) 1. JavaScript를 사용하는 방법 script 태그를 사용한다 script 태그는 반드시 body태그의 가장 아래쪽에 위치한다. script 태그 내부에 JS코드를 작성하거나 src 속성을 이용하여 JS파일을 연동시킨다. 예시) HTML 구조 This works! 예시) JS 파일 코드 alert("JavaScript is working"); 예시) 실행 결과 2. JS의 기본문법 1) JS variable(변수) 선언 방법 JS에는 변수를 사용하기 위해 반드시 3가지 과정을 거쳐야한다. Create(선언), Initialize(초기화), Use(사용) 선언과 초기화는 한번에 수행할 수 있으며, JS에서 변수를 선언할 때, 반드시 let을 붙여야 한다. ex) let a = 100; 명령어가 끝날.. 2020. 10. 1.
Vanilla JS - JavaScript란 무엇인가 1. JavaScript란? - 웹 Front-end에서 사용할 수 있는 유일한 프로그래밍 언어 - 웹사이트를 만들 때, HTML과 CSS가 뼈대와 근육의 역할이라면 JS는 뇌의 역할(동적/상호작용 요소 구현에 사용) - 웹 브라우저에 다양한 이벤트(기능)를 구현하기 위해 필요한 언어 - 웹 브라우저는 JavaScript를 기반으로 동작한다. 즉, 모든 컴퓨터에 설치되어 있는 언어이며 이해할 수 있는 언어다. 2. JavaScript의 버전 JS라고 하면 ES5, ES6와 같은 이름을 한번쯤 들어봤을 것이다. 무엇일까? - JS는 모든 웹 브라우저에서 작동한다. 그러므로 다양한 웹 브라우저에서 JS가 잘 작동하도록 표준규격이 필요했다. ES는 JS의 표준규격을 만든 ECMA라는 국제기구의 이름을 따온 E.. 2020. 10. 1.
Advanced Algorithm - MST(Kruskal's Algorithm)(3) 1. 크루스칼 알고리즘의 구현 1) 기본 그래프의 구현 - 아래의 그림과 같은 기본 그래프를 딕셔너리를 이용하여 구현한다. mygraph = { 'vertices':['A', 'B', 'C', 'D', 'E', 'F', 'G'], 'edges':[ (7, 'A', 'B'), (5, 'A', 'D'), (7, 'B', 'A'), (8, 'B', 'C'), (9, 'B', 'D'), (7, 'B', 'E'), (8, 'C', 'B'), (5, 'C', 'E'), (5, 'D', 'A'), (9, 'D', 'B'), (7, 'D', 'E'), (6, 'D', 'F'), (7, 'E', 'B'), (5, 'E', 'C'), (7, 'E', 'D'), (8, 'E', 'F'), (9, 'E', 'G'), (6, .. 2020. 10. 1.
Advanced Algorithm - MST(Union-Find Algorithm)(2) * 본 포스팅은 이전 포스팅과 이어지는 내용입니다. [복습] 최소신장트리(MST)의 개념 - 어떤 그래프를 기반으로 만들어진, 간선의 총 가중치(비용)가 최소이며 사이클 없이 모든 노드가 연결된 트리 최소신장트리의 대표 알고리즘 - 크루스칼 알고리즘(Kruskal's Algorithm), 프림 알고리즘(Prim's Algorithm) 크루스칼 알고리즘 - 어떤 그래프를 기반으로 MST를 만들기 위한 알고리즘 - 모든 간선의 가중치를 오름차순으로 정렬하고 가중치가 낮은 간선부터 사이클이 생기지 않는 조건하에 모든 노드를 연결 - 사이클의 발생유무를 판단하기 위해서 크루스칼 알고리즘에서는 Union-Find 알고리즘을 사용한다. Union-Find 알고리즘 - 크루스칼 알고리즘에서 노드간의 연결을 통해 발생.. 2020. 9. 30.