{"componentChunkName":"component---src-templates-blog-post-js","path":"/algorithm/2016-04-30-Algorithm-Study-1/","result":{"data":{"site":{"siteMetadata":{"title":"Seungdols Company","author":"[Seungdols]","siteUrl":"https://seungdols.dev","comment":{"disqusShortName":"","utterances":"seungdols/seungdols.dev"},"sponsor":{"buyMeACoffeeId":"seungdols"}}},"markdownRemark":{"id":"ba79731c-a49d-53e4-82da-0e705a11f486","excerpt":"알고리즘 스터디 - 1일차 4/30(토) 알고리즘 스터디1 자료구조란 무엇일까? A…","html":"<h1 id=\"알고리즘-스터디---1일차\" style=\"position:relative;\"><a href=\"#%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%8A%A4%ED%84%B0%EB%94%94---1%EC%9D%BC%EC%B0%A8\" aria-label=\"알고리즘 스터디   1일차 permalink\" class=\"anchor before\"><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>알고리즘 스터디 - 1일차</h1>\n<p>4/30(토) 알고리즘 스터디1</p>\n<h3 id=\"자료구조란-무엇일까\" style=\"position:relative;\"><a href=\"#%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C\" aria-label=\"자료구조란 무엇일까 permalink\" class=\"anchor before\"><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>자료구조란 무엇일까?</h3>\n<p>A) 일련의 자료를 집합형태로 쌓을 수 있는 구조를 말한다고 생각한다.\n실생활에서 장에 그릇을 놓는 다면 찬장, 책을 모아 두면 책장이 되는 것 처럼 ‘틀’이라고 생각 할 수 있다.\n그런 의미로 볼 수 있다고 생각한다. 컴퓨터로 치면 데이터 집합인 배열, 리스트 등등도 그러한 경우\n결국 어떤 용도로 쓸 것인지가 중요하다. 결국 자료구조의 용도는 무엇을 담을지에 대한 초점이다.</p>\n<p>팀원) 사용하기 편하게 &#x26; 빠르게 만드는게 자료구조. - 효율성 위주 ( 목적성 위주로 생각해도 될 것 같다.)</p>\n<h3 id=\"자료구조를-왜-사용할까\" style=\"position:relative;\"><a href=\"#%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EB%A5%BC-%EC%99%9C-%EC%82%AC%EC%9A%A9%ED%95%A0%EA%B9%8C\" aria-label=\"자료구조를 왜 사용할까 permalink\" class=\"anchor before\"><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>자료구조를 왜 사용할까?</h3>\n<p>A) 나는 프로그래머의 편의성인 것 같다. 우선 컴퓨터 프로그래밍에서 자료구조가 생긴 이유는 각 자료형의 진화 역사를 보면 알 수 있다고 생각한다.\n초기에는 int, char, float,double등 primitive type만 존재했으나, 동등한(equivalent) type을 여러 개 생성 하는 방법이 필요해 진 것이다. 그게 바로 Array이고, 그 이후에 다른 Type도 같이 사용하고 싶어서 나온 개념은 Struct이다. 이는 다양한 Type을 한데 모아 사용하고자 함이다. 그러다가 순간 순간에만 메모리 효율성을 위해 사용하고자 해서 나온 구조가 Union이고, Method(행위)까지 추가하게 된 개념이 class라고 생각한다. 결국 프로그래머의 편의성에 대한 점도 일부 맞지 않을까 ?</p>\n<p>팀원 ) 자료들에 사용하는데 초점을 맞춰서 생각!</p>\n<ul>\n<li>사용할 때, 어떤 부분을 초점을 맞추는지에 대해 목적이 다르기에 각기 필요한 자료구조(시간/메모리)</li>\n</ul>\n<h3 id=\"왜-다양한-자료구조가-있으며-자료구조의-선택-기준은-무엇일까\" style=\"position:relative;\"><a href=\"#%EC%99%9C-%EB%8B%A4%EC%96%91%ED%95%9C-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EA%B0%80-%EC%9E%88%EC%9C%BC%EB%A9%B0-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EC%9D%98-%EC%84%A0%ED%83%9D-%EA%B8%B0%EC%A4%80%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C\" aria-label=\"왜 다양한 자료구조가 있으며 자료구조의 선택 기준은 무엇일까 permalink\" class=\"anchor before\"><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>왜 다양한 자료구조가 있으며, 자료구조의 선택 기준은 무엇일까?</h3>\n<p>A) 자료구조의 선택 기준은 상황에 따른 목적이 중요할 것으로 생각 된다. 어떤 자료가 특정 집합으로 구성되어 있을 때 이것을 원하는 바(목적)의 형태로 가공하기 쉽고, 자료 처리를 쉽게 할 수 있는 구조가 상황마다 다르기 때문이다.</p>\n<p>팀원 )</p>\n<ul>\n<li>목적을 실현하는데 중요한 효율성(시간/공간)</li>\n<li>얼마나 빠른 시간/제한 된 시간에서 답을 도출하는지</li>\n</ul>\n<h3 id=\"알고리즘이란-무엇일까\" style=\"position:relative;\"><a href=\"#%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C\" aria-label=\"알고리즘이란 무엇일까 permalink\" class=\"anchor before\"><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>알고리즘이란 무엇일까??</h3>\n<p>A)알고리즘은 일련의 처리 절차이다. 단, 여기서 중요한점은 간략함이 될 것 같다. 부수적인 것들이 많아지면 알고리즘이라 부르기 어렵고 Logic이라 부르는 것이 더 알맞는 표현일 것 같다. 부수적인 것이 없는 처리 절차를 표현한 것이 알고리즘이며, 알고리즘은 시간 복잡도, 공간 복잡도를 따져야 할 만큼 중요한 처리 절차의 목적을 포함하고 있다.</p>\n<p>즉, 알고리즘과 자료구조의 차이점은 자료구조는 ‘데이터를 저장하는 틀’이고, 알고리즘은 처리 절차이다.\n알고리즘에서 자료구조를 사용한다고 표현 할 수 있겠다.</p>\n<h3 id=\"왜-다양한-알고리즘이-존재할까\" style=\"position:relative;\"><a href=\"#%EC%99%9C-%EB%8B%A4%EC%96%91%ED%95%9C-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%B4-%EC%A1%B4%EC%9E%AC%ED%95%A0%EA%B9%8C\" aria-label=\"왜 다양한 알고리즘이 존재할까 permalink\" class=\"anchor before\"><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>왜 다양한 알고리즘이 존재할까??</h3>\n<p>A)상황마다 매번 같은 알고리즘을 쓸 수 없을 것이 첫 번째 이유라 생각한다. 정렬 기법도 다양한 이유가 목적이 다르기때문에 달라진다. 흔하게 사용하는 Quick Sort라던지, Insertion Sort등 속도가 다르고, 정렬시 사용하는 공간(Space)이 다르다. 즉, 정보를 처리하는 목적에 따라 시간에 High-Cost를 투자 할 것인지? 공간에 High-Cost를 투자 할 것인지가 모든 개발 상황마다 다르게 적용이 될 수 있으므로, 알고리즘은 다양해진다. 상황이 다양하고, 목적도 다양하기에 다양한 알고리즘을 만들고 사용 한다.</p>\n<h4 id=\"배열의-주요-특징은-무엇\" style=\"position:relative;\"><a href=\"#%EB%B0%B0%EC%97%B4%EC%9D%98-%EC%A3%BC%EC%9A%94-%ED%8A%B9%EC%A7%95%EC%9D%80-%EB%AC%B4%EC%97%87\" aria-label=\"배열의 주요 특징은 무엇 permalink\" class=\"anchor before\"><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>배열의 주요 특징은 무엇?</h4>\n<p>구조적 데이터 타입(Structured data type) : 여러 데이터를 묶어서 하나의 단위로 처리하는 데이터 타입\n배열 - 같은 자료형의 모임(homogeneous)이며, 저장하는 자료형태는 Equivalent Type이다.</p>\n<h4 id=\"배열의-크기-첨자-지정\" style=\"position:relative;\"><a href=\"#%EB%B0%B0%EC%97%B4%EC%9D%98-%ED%81%AC%EA%B8%B0-%EC%B2%A8%EC%9E%90-%EC%A7%80%EC%A0%95\" aria-label=\"배열의 크기 첨자 지정 permalink\" class=\"anchor before\"><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>배열의 크기 (첨자 지정)</h4>\n<ol>\n<li>Static</li>\n<li>정적으로 범위가 고정</li>\n<li>예 ) static int a[100];</li>\n<li>Fixed-Stack dynamic</li>\n<li>범위는 정적으로 고정 할당은 선언문에서 되어 효율성 증가</li>\n<li>예 ) int a[100];//local variable</li>\n<li>Stack dynamic - 범위가 동적으로 결정/메모리 할당도 동적(실행시간에 됨)</li>\n<li>stack에 할당</li>\n<li>Fixed heap dynamic - 동적 할당 후 크기가 고정</li>\n<li>동적/할당 후 크기는 고정 stack이 아닌 Heap 메모리 사용</li>\n<li>C/C++ : malloc / free for arrays</li>\n<li>C++ : new &#x26; delete</li>\n<li>Java / C# : new</li>\n<li>C# : Class2[] c2 = new Class2[20];</li>\n<li>Heap-dynamic - 할당 크기 모두 동적으로 변화</li>\n<li>C# : List<String> stringList = new List<String>();</li>\n<li>C/C++, Fortran, Perl : 첨자 범위 검사 명세 없음.</li>\n<li>Java, ML, C# : 첨자의 범위를 명시함.</li>\n<li>Ada : 기본은 첨자 범위 검사 그러나 하지 않을 가능성도 높다.</li>\n</ol>\n<p>또한, 일반적인 언어는 첨자 하한이 0인데 반면, Ada, Perl의 경우 음수도 가능하다.</p>\n<h4 id=\"원소들의-실제-메모리-위치\" style=\"position:relative;\"><a href=\"#%EC%9B%90%EC%86%8C%EB%93%A4%EC%9D%98-%EC%8B%A4%EC%A0%9C-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%9C%84%EC%B9%98\" aria-label=\"원소들의 실제 메모리 위치 permalink\" class=\"anchor before\"><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>원소들의 실제 메모리 위치</h4>\n<p>정해진 사이즈만큼 연속적인 공간에 할당 된다.</p>\n<p>1차원 배열의 경우</p>\n<table>\n<thead>\n<tr>\n<th>A[0]</th>\n<th>A[1]</th>\n<th>A[2]</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>204</td>\n<td>208</td>\n<td>212</td>\n</tr>\n</tbody>\n</table>\n<p>1차원 배열 주소 공식</p>\n<p><code class=\"language-text\">A[i] = base * (i - a) * size</code>\nbase : 시작 주소 (A[0]가 시작주소)\na : 첫번 째 원소의 첨자 (음수가 아니면 0)\nSize : 각 원소의 크기</p>\n<h5 id=\"row-major\" style=\"position:relative;\"><a href=\"#row-major\" aria-label=\"row major permalink\" class=\"anchor before\"><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>row-major</h5>\n<p>실제 메모리에 저장되는 위치가 행 중심으로 저장 된다.\nA[1][1] , A[1][2] , A[1][3] … 식으로 저장 된다.\n대부분의 언어에서 사용.</p>\n<h5 id=\"column-major\" style=\"position:relative;\"><a href=\"#column-major\" aria-label=\"column major permalink\" class=\"anchor before\"><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>column-major</h5>\n<p>실제 메모리에 저장되는 위치가 열 중심으로 저장 된다.\nA[1][1] , A[2][1] , A[3][1] … 식으로 저장 된다.\n주로 Fortran 계열에서 사용.</p>\n<h4 id=\"선언생성초기화원소접근방법\" style=\"position:relative;\"><a href=\"#%EC%84%A0%EC%96%B8%EC%83%9D%EC%84%B1%EC%B4%88%EA%B8%B0%ED%99%94%EC%9B%90%EC%86%8C%EC%A0%91%EA%B7%BC%EB%B0%A9%EB%B2%95\" aria-label=\"선언생성초기화원소접근방법 permalink\" class=\"anchor before\"><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>선언,생성,초기화,원소접근방법</h4>\n<p>선언</p>\n<p><code class=\"language-text\">int arr[100];</code> - C\n<code class=\"language-text\">int[] arr = new int[100];</code> - Java</p>\n<p>검색</p>\n<ul>\n<li>index를 통해 직접 접근/처음 부터 끝까지 전체 순회</li>\n</ul>\n<p>삭제</p>\n<ul>\n<li>해당 index에 해당하는 공간 삭제 후 빈 공간을 데이터 이동하여 빈 공간이 없도록 함.</li>\n</ul>\n<p>삽입</p>\n<ul>\n<li>index에 해당하는 공간에 값 대입, 주로 끝에 데이터를 삽입.</li>\n</ul>\n<h6 id=\"퀴즈\" style=\"position:relative;\"><a href=\"#%ED%80%B4%EC%A6%88\" aria-label=\"퀴즈 permalink\" class=\"anchor before\"><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>퀴즈</h6>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\"><span class=\"token keyword\">int</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">int</span> arr<span class=\"token punctuation\">[</span><span class=\"token number\">5</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span><span class=\"token number\">3</span><span class=\"token punctuation\">,</span><span class=\"token number\">4</span><span class=\"token punctuation\">,</span><span class=\"token number\">5</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"%d %d\\n\"</span><span class=\"token punctuation\">,</span> arr<span class=\"token punctuation\">[</span><span class=\"token number\">5</span><span class=\"token punctuation\">]</span> <span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">[</span>arr<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>위 코드에서 이상한 점을 발견 하셨나요?\n왜 그렇게 되는지는 한 번 공부해보시기 바랍니다.</p>\n<h3 id=\"생각해볼-문제\" style=\"position:relative;\"><a href=\"#%EC%83%9D%EA%B0%81%ED%95%B4%EB%B3%BC-%EB%AC%B8%EC%A0%9C\" aria-label=\"생각해볼 문제 permalink\" class=\"anchor before\"><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>생각해볼 문제!</h3>\n<p>컴퓨터의 메모리 영역 관련 자료 : <a href=\"http://dsnight.tistory.com/50\">메모리 영역 참고</a></p>\n<ul>\n<li>메모리 할당( 정적 메모리 할당, 동적 메모리 할당 )의 비교\n_ 정적 할당\n_ 동적 메모리 할당</li>\n<li>저장된 원소들의 자료형( 배열 vs 구조체 )에 따른 비교</li>\n<li>추상자료형(ADT)와 자료구조(Data Structure)의 비교 및 구분</li>\n</ul>\n<h5 id=\"리스트의-개념\" style=\"position:relative;\"><a href=\"#%EB%A6%AC%EC%8A%A4%ED%8A%B8%EC%9D%98-%EA%B0%9C%EB%85%90\" aria-label=\"리스트의 개념 permalink\" class=\"anchor before\"><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>리스트의 개념?</h5>\n<p>쉽게 생각하면 정보의 나열이라고 생각 할 수 있는데, 순서가 있다.</p>\n<ul>\n<li>arrayList</li>\n<li>LinkedList</li>\n</ul>\n<h5 id=\"두-구현방법의-특징과-비교-장단점-사용되는-예\" style=\"position:relative;\"><a href=\"#%EB%91%90-%EA%B5%AC%ED%98%84%EB%B0%A9%EB%B2%95%EC%9D%98-%ED%8A%B9%EC%A7%95%EA%B3%BC-%EB%B9%84%EA%B5%90-%EC%9E%A5%EB%8B%A8%EC%A0%90-%EC%82%AC%EC%9A%A9%EB%90%98%EB%8A%94-%EC%98%88\" aria-label=\"두 구현방법의 특징과 비교 장단점 사용되는 예 permalink\" class=\"anchor before\"><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>두 구현방법의 특징과 비교, 장단점, 사용되는 예</h5>\n<p>특징</p>\n<ol>\n<li>ArrayList의 경우 배열 구조를 사용하므로 직접 접근이 가능하다.</li>\n<li>LinkedList의 경우 확장이 용이하다.</li>\n</ol>\n<p>비교</p>\n<ul>\n<li>\n<p>ArrayList의 경우</p>\n<p>  \t* 삽입은 빠르다. 단, 삭제연산에는 많은 비용이 발생한다.\n* 추가적으로 확장에 불리한 구조를 가진다.\n* 검색도 빠르다.</p>\n</li>\n<li>LinkedList의 경우\n_ 삽입이 느리다.\n_ 순차검색!! * 삭제는 편리하다.</li>\n</ul>\n<h5 id=\"왜-리스트를-구현함에-있어-다양한-방법이-존재할까\" style=\"position:relative;\"><a href=\"#%EC%99%9C-%EB%A6%AC%EC%8A%A4%ED%8A%B8%EB%A5%BC-%EA%B5%AC%ED%98%84%ED%95%A8%EC%97%90-%EC%9E%88%EC%96%B4-%EB%8B%A4%EC%96%91%ED%95%9C-%EB%B0%A9%EB%B2%95%EC%9D%B4-%EC%A1%B4%EC%9E%AC%ED%95%A0%EA%B9%8C\" aria-label=\"왜 리스트를 구현함에 있어 다양한 방법이 존재할까 permalink\" class=\"anchor before\"><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>왜 리스트를 구현함에 있어, 다양한 방법이 존재할까?</h5>\n<ul>\n<li>효율성에 따라 사용처가 다르기 때문이 아닐까 생각해본다. 어떤 곳은 검색이 중요하면, 배열이 더 편리할 것이다.</li>\n<li>공간 효율성을 중요하게 생각하는 곳이라면 배열이 좋다.</li>\n</ul>\n<h5 id=\"리스트의-주요-연산-및-주의-사항\" style=\"position:relative;\"><a href=\"#%EB%A6%AC%EC%8A%A4%ED%8A%B8%EC%9D%98-%EC%A3%BC%EC%9A%94-%EC%97%B0%EC%82%B0-%EB%B0%8F-%EC%A3%BC%EC%9D%98-%EC%82%AC%ED%95%AD\" aria-label=\"리스트의 주요 연산 및 주의 사항 permalink\" class=\"anchor before\"><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>리스트의 주요 연산 및 주의 사항</h5>\n<ul>\n<li>삽입의 3가지 경우( 공백리스트인 경우, 리스트의 맨처음에 삽입, 리스트의 중간에 삽입 )</li>\n<li>삭제의 2가지 경우( 맨 앞의 노드 삭제, 중간의 노드 삭제 )</li>\n<li>삭제 및 검색시 중복자료를 허용하는 경우와 그렇지 않는 경우 * 중복을 허용하는 경우와 그렇지 않은경우의 차이가 존재함.</li>\n</ul>\n<h5 id=\"다양한-리스트의-비교-및-존재-이유-사용-경우\" style=\"position:relative;\"><a href=\"#%EB%8B%A4%EC%96%91%ED%95%9C-%EB%A6%AC%EC%8A%A4%ED%8A%B8%EC%9D%98-%EB%B9%84%EA%B5%90-%EB%B0%8F-%EC%A1%B4%EC%9E%AC-%EC%9D%B4%EC%9C%A0-%EC%82%AC%EC%9A%A9-%EA%B2%BD%EC%9A%B0\" aria-label=\"다양한 리스트의 비교 및 존재 이유 사용 경우 permalink\" class=\"anchor before\"><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>다양한 리스트의 비교 및 존재 이유, 사용 경우</h5>\n<ul>\n<li>단순 연결 리스트</li>\n<li>이중 연결 리스트</li>\n<li>이중 말단 연결 리스트</li>\n<li>원형 연결 리스트</li>\n</ul>\n<h3 id=\"스택이란\" style=\"position:relative;\"><a href=\"#%EC%8A%A4%ED%83%9D%EC%9D%B4%EB%9E%80\" aria-label=\"스택이란 permalink\" class=\"anchor before\"><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>스택이란?</h3>\n<ul>\n<li>쉽게 생각하자면, 그릇 쌓기로 생각할 수 있다. 자료구조 형태가 그릇 쌓기처럼 구성 되어 있는 것이다.</li>\n<li>컴퓨터용어로 표현하면, LIFO(Last In First Out)의 특징을 갖는 구조이다.</li>\n</ul>\n<p>스택의 연산</p>\n<ul>\n<li>삽입 * 그릇은 위로만 쌓을 수 있다.</li>\n<li>삭제 * 그릇은 위로만 뺄 수 있다. ( 중간 것을 빼면 그릇이 깨진다. - 주인한테 혼난다(컴퓨터로 치면 OS?))</li>\n</ul>\n<p>스택의 실제 사용 예</p>\n<ul>\n<li>계산기\n스택의 구현\n_ Array\n_ List</li>\n</ul>\n<h3 id=\"큐란-\" style=\"position:relative;\"><a href=\"#%ED%81%90%EB%9E%80-\" aria-label=\"큐란  permalink\" class=\"anchor before\"><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>큐란 ?</h3>\n<ul>\n<li>은행에서 순서표를 받고 기다리는 행위와 비슷하다.</li>\n<li>컴퓨터용어로 표현하면, FIFO(First In First Out)의 특징을 갖는 구조이다.</li>\n</ul>\n<p>큐의 연산</p>\n<ul>\n<li>삽입</li>\n<li>삭제</li>\n</ul>\n<p>큐의 사용 예</p>\n<ul>\n<li>OS의 스케쥴링, BFS의 정보 저장, 그래프의 사이클 찾기, 네트워크 통신 ?</li>\n</ul>\n<p>큐의 구현과 특징, 비교</p>\n<ul>\n<li>Array</li>\n<li>List</li>\n</ul>\n<p>큐의 종류와 존재 이유 특징, 차이점 비교</p>\n<p><a href=\"http://colomy.tistory.com/64\">큐 - 관련 colomy.tistory.com</a></p>\n<ul>\n<li>선형큐\n_ 일렬로 대기표를 받는 공간이라고 생각하면 쉬우며, 선형큐는 완벽한 순서 절차를 위해 존재한다고 생각함.\n_ 배열로 구현시 데이터 이동이 빈번하다.</li>\n<li>원형큐\n_ 흔히 배열로 구현할 수 있으며, % 연산자를 활용해 indexing이 가능하다.\n_ 장점\n_ Node형태 보다 간결하고, 쉬운 구현\n_ 단점\n_ 데이터 삭제시 데이터의 이동이 빈번하다.\n_ 포화상태와 공백상태를 구분하기 위해 1개의 공간이 유휴공간으로 지정되어야한다.</li>\n<li>덱(Dequeue)\n_ 기존 큐와는 다르게 앞/뒤로 out이 가능한 형태의 큐로 기존 큐와는 다르다.\n_ 먼저 온 데이터가 먼저 Out될 수 있고, 제일 늦게 온 데이터가 Out될 수 있는 구조이므로 스택과 큐의 혼용 개념이라고 생각한다.<br>\n* 보통 일반적으로 이중 연결 링크드 리스트로 구현한다.</li>\n</ul>","frontmatter":{"title":"Algorithm Study 1일차","date":"April 30, 2016"}}},"pageContext":{"slug":"/algorithm/2016-04-30-Algorithm-Study-1/","previous":{"fields":{"slug":"/java/2016-04-27-BigInteger-Java/"},"frontmatter":{"title":"Use BigInteger of Java "}},"next":{"fields":{"slug":"/java/2016-05-05-5 Different Ways of Printing an Array/"},"frontmatter":{"title":"5 Different Ways of Printing an Array"}}}}}