{"data":{"site":{"siteMetadata":{"title":"lastrites2018","author":"lastrites2018","siteUrl":"https://lastrites2018.netlify.com","comment":{"disqusShortName":"","utterances":"lastrites2018/gatsby-first-blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"de1399ef-a956-5c5f-b007-69951e28bccf","excerpt":"checkpoint 4 Data Structures 2 Linked List 연결 리스트 다음 노드가 없는 경우 null 로 표현 앞 쪽이 head, 뒤 쪽이 tail 특징 한 번에 특정 값에 접근할 수 없다. (헤드부터 시작하거나) 이전의 노드로 돌아갈 수 없다. (Doubly Linked List는 가능!) 다음 노드 위치만 가지고 있다! Memory Allocation : Javascript는 Array가 Object라 약간 다를 수 있음 Linked list…","html":"<h2 id=\"checkpoint-4\"><a href=\"#checkpoint-4\" aria-label=\"checkpoint 4 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>checkpoint 4</h2>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">//  5</span>\nobj1 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> x <span class=\"token punctuation\">:</span> <span class=\"token number\">15</span><span class=\"token punctuation\">}</span>\n참조만 함<span class=\"token punctuation\">.</span>\nobj2<span class=\"token punctuation\">.</span>x <span class=\"token operator\">=</span> <span class=\"token number\">15</span><span class=\"token operator\">-</span><span class=\"token operator\">></span> 직접적으로 부여하게 되면 값이 있기 때문에 상위로 올라가지 않으나<span class=\"token punctuation\">,</span> 값이 없는 경우엔 상위로 올라가면서 값을 찾음<span class=\"token punctuation\">.</span>\n\n\n<span class=\"token comment\">// 6</span>\n<span class=\"token keyword\">var</span> obj1 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> x<span class=\"token punctuation\">:</span> <span class=\"token number\">10</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">var</span> obj2 <span class=\"token operator\">=</span> Object<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>obj1<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">//obj1의 값을 불러올 수 있게 된다</span>\nobj2<span class=\"token punctuation\">.</span>x <span class=\"token operator\">+=</span> <span class=\"token number\">10</span><span class=\"token punctuation\">;</span>\nobj1<span class=\"token punctuation\">.</span>x <span class=\"token operator\">=</span> <span class=\"token number\">15</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// 이 시점에서 obj1  = { x : 15}; obj2 = { x : 20; }</span>\n<span class=\"token keyword\">var</span> result <span class=\"token operator\">=</span> obj2<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// 7</span>\n자신이 원하는 값을 찾을때까지 상위로 올라감<span class=\"token punctuation\">.</span>\n\n<span class=\"token comment\">// 틀린 문제</span>\n<span class=\"token number\">8</span>번 <span class=\"token operator\">-</span> 다음 코드를 실행한 후<span class=\"token punctuation\">,</span> result 의 값은 무엇이 될까요<span class=\"token operator\">?</span>\n<span class=\"token keyword\">var</span> obj1 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> x<span class=\"token punctuation\">:</span> <span class=\"token number\">10</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">var</span> obj2 <span class=\"token operator\">=</span> Object<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>obj1<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">var</span> obj3 <span class=\"token operator\">=</span> Object<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>obj2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nobj2<span class=\"token punctuation\">.</span>x <span class=\"token operator\">=</span> <span class=\"token number\">20</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 중간에 값이 들어갔기 때문에 obj1까지 찾아갈 필요가 없음.</span>\n<span class=\"token keyword\">var</span> result <span class=\"token operator\">=</span> obj3<span class=\"token punctuation\">.</span>x <span class=\"token operator\">+</span> <span class=\"token number\">10</span><span class=\"token punctuation\">;</span>\nresult의 답은<span class=\"token operator\">?</span>\n\n<span class=\"token comment\">// 9</span>\n사실 Object<span class=\"token punctuation\">.</span>create 와 똑같은데<span class=\"token punctuation\">,</span> 과정은 똑같은데 <span class=\"token keyword\">new</span> 키워드를 썼을 뿐이다<span class=\"token punctuation\">.</span><span class=\"token punctuation\">(</span>더 편함<span class=\"token punctuation\">)</span>\n함수가 생성되는 순간<span class=\"token punctuation\">,</span> 함수의 프로토타입 오브젝트가 메모리 어딘가에 생성이 된다<span class=\"token punctuation\">.</span>\n<span class=\"token punctuation\">(</span>그리고 생성자도 생성이 됨<span class=\"token punctuation\">.</span> prototype <span class=\"token punctuation\">:</span> constructor <span class=\"token punctuation\">:</span> <span class=\"token function\">f</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">var</span> arr <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">var</span> arr <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Array</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token comment\">// 이 표현이 위처럼 줄어든 것 뿐이고, array도 함수로 만들어짐. 다 Array.prototype에서 가져와서 쓰는 것.</span>\n<span class=\"token comment\">//만들어진 새 배열에 그때마다 메소드를 넣어주는게 아니라, 부모의 힘(Array.prototype)을 가져와서 쓰기만 한다.</span></code></pre></div>\n<h2 id=\"data-structures-2\"><a href=\"#data-structures-2\" aria-label=\"data structures 2 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Data Structures 2</h2>\n<ol>\n<li>Linked List 연결 리스트</li>\n</ol>\n<p>다음 노드가 없는 경우 null 로 표현</p>\n<p>앞 쪽이 head, 뒤 쪽이 tail</p>\n<ul>\n<li>특징</li>\n</ul>\n<p>한 번에 특정 값에 접근할 수 없다. (헤드부터 시작하거나)</p>\n<p>이전의 노드로 돌아갈 수 없다. (Doubly Linked List는 가능!)</p>\n<p>다음 노드 위치만 가지고 있다!</p>\n<p>Memory Allocation : Javascript는 Array가 Object라 약간 다를 수 있음</p>\n<p>Linked list는 메모리 관리를 효율적으로 함?</p>\n<p>메모리 관리 면에서 일렬로 할 필요가 없음</p>\n<p>JS에선 속도면에서는 큰 차이가 없다?</p>\n<p>static으로 구현하면 메모리에 여유가 없을 것</p>\n<p>ex)</p>\n<ul>\n<li>\n<p>웹 사이트 이동(go back/foward)</p>\n</li>\n<li>\n<p>인간의 뇌 (잃어버린 기억을 찾는 방법 - 체이닝)</p>\n</li>\n<li>\n<p>Tree</p>\n</li>\n<li>\n<p>정렬 알고리즘(Binary Search Tree) 제일 많이 씀 BST</p>\n</li>\n</ul>\n<p>바이너리(1,0)라서 칠드런이 둘 밖에 없음. 중국의 산아제한정책</p>\n<p>500 페이지 책의 190 페이지에 접근한다고 하자 그러면 절반 딱 나눠서 접근하고, 한번에 접근하는게 아니라 좁혀나감</p>\n<ul>\n<li>계층 구조 (트리 구조 또한 다른 자료 구조로 만든다 array, linked list, stack, queue)</li>\n</ul>\n<p>조상 수가 depth (level)</p>\n<ul>\n<li>\n<p>검색방법</p>\n<ul>\n<li>\n<p>Breadth First Search (BFS 너비 우선 탐색)</p>\n</li>\n<li>\n<p>Depth First Search (DFS 깊이 우선 탐색)</p>\n</li>\n</ul>\n<p>일단 던젼을 쭉 들어가서 그 옆에 있는 애 찾고 그 다음으로 큰 브랜치 들어가서 탐색</p>\n<p>// 일반적인 recursion에서 쓰는 방법</p>\n</li>\n</ul>\n<p>하나의 검색 방법만 사용하진 않음.</p>\n<ul>\n<li>\n<p>Binary Search Tree 사용 예</p>\n<ul>\n<li>spreadsheet</li>\n</ul>\n</li>\n<li>\n<p>Graph</p>\n</li>\n</ul>\n<p>하나의 요소가 여러 엣지를 가짐. 2차원적인 자료 구조.</p>\n<p>주로 SNS가 그래프 구조. facebook</p>\n<p>네비게이션 시스템</p>\n<blockquote>\n<p>엣지랑 노드랑 같은 개념인가?</p>\n<p>혼용해서 씀. 노드는 value는 엣지랑 표현하기도 하고, 밸류 자체를 표현하기도 하고, 컨텍스트에 따라 다름…</p>\n<p>-_-..</p>\n</blockquote>\n<p>Undirected Graph(짝사랑, 일방통행도 있고 연결된 관계도 있고…)</p>\n<p>길 찾기 알고리즘에서 많이 씀</p>\n<p>그래프 그림 -> 옆에 관계가 있으면 1</p>\n<ul>\n<li>Weighted Edgeds 비용 개념을 넣어서, 거리를 생각해볼 수 있음</li>\n</ul>\n<p>cost, distance 개념을 넣어서 얼마나 먼지, 얼마나 비용이 드는지</p>\n<ol start=\"4\">\n<li>Hash Table</li>\n</ol>\n<p>ex) 전화번호부의 주소록이 이런 식으로 구현</p>\n<ul>\n<li>\n<p>핵심은 결과물이 유니크해야 하나, 유니크 하지 않을 수도 있다</p>\n<p>속도가 빠르기 때문이니까</p>\n<p>유니크한 서로 다른 결과물을 낸다…가 원칙이나 그러지 않을 수도?</p>\n<p>헤시 테이블은 찜질방 락커룸?</p>\n<p>sha-256 이상 권장</p>\n<p>입력값 여러개 쓰지만 time을 주로 씀</p>\n<p>하나만 바꿔도 완벽하게 다른 애가 나옴</p>\n<p>운 나쁘게 index가 겹치게 된다면? 회피 알고리즘이 있음</p>\n<ul>\n<li>Separate chaining</li>\n</ul>\n<p>??</p>\n<ul>\n<li>open addressing</li>\n</ul>\n</li>\n</ul>\n<p>거의 양 옆에 나올 확률이 없기에 그냥 옆에 둠 + 또 겹침? 또 아래 둠.</p>\n<p>단점 :</p>\n<p>데이터 정렬에는 맞지 않고, 계산자체가 오래 걸릴 수 있음</p>\n<p>구현 및 사용이 어려움</p>\n<ul>\n<li>인증</li>\n<li>검색</li>\n</ul>\n<p>자료 구조 공부 왜 하니?</p>\n<ul>\n<li>효율적인 알고리즘 선택 위해서</li>\n<li>사고 훈련에 도움 됨</li>\n</ul>\n<p>레퍼런스가 없기 때문에 다양한 코드가 나올 수 있음</p>\n<p>참조하면 비슷한 것들이 나오지만?</p>\n<p>Lean? 조금씩 만들면서 테스트 해보는 개념</p>\n<h2 id=\"complexity\"><a href=\"#complexity\" aria-label=\"complexity permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>complexity</h2>\n<p>time : 적은 시간</p>\n<p>space : 적은 공간 (메모리?)</p>\n<blockquote>\n<p>세션에서는 time에 집중함</p>\n</blockquote>\n<blockquote>\n<p>몇 번의 작업이 필요한지가 중요하다!</p>\n</blockquote>\n<p>n * n</p>\n<blockquote>\n<p>시간이 얼마나 걸리는지? ( 몇 번 )</p>\n</blockquote>\n<p>Constant Time - Awesome</p>\n<p>입력이 늘어나도 크게 변화하지 않는다</p>\n<p>Big - O Notation</p>\n<p>O(1)</p>\n<p>o(n) 앞에 붙는 수는 크게 (컴퓨터에겐) 영향을 미치지 않기 때문에 2n-> n</p>\n<p>o(n*n)</p>\n<p>O(log n) -> Binary Search</p>\n<p>중간부터 검사해서 어느 쪽에 더 가까운지?</p>\n<h2 id=\"페어-프로그래밍\"><a href=\"#%ED%8E%98%EC%96%B4-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D\" aria-label=\"페어 프로그래밍 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>페어 프로그래밍</h2>\n<blockquote>\n<p>쉬운 말로 설명할 수 있을 때가 가장 잘 이해하는 것, 고수는 쉬운 말로 하고, 하수는 어려운 말로 혼란스럽게 한다</p>\n</blockquote>","frontmatter":{"title":"Immersive Sprint - DATA Structure Day 2","date":"September 20, 2018"}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"slug":"/til/20180920 IM08D04 DATA Structure Day 2/","previous":{"fields":{"slug":"/til/20180919 IM08D03 DATA Structure Day 1 - OOP, QueueStack/"},"frontmatter":{"title":"IM08D03 DATA Structure Day 1 - OOP, QueueStack","category":"TIL"}},"next":{"fields":{"slug":"/til/20180921 IM08D05 DATA Structure Day 3/"},"frontmatter":{"title":"Immersive Sprint - DATA Structure Day 3","category":"TIL"}}}}