알고리즘 공부하기 좋은 사이트 3 국내의 유수한 IT기업들이 알고리즘 대회를 여럿 개최하고, 취업하는데에 있어서 알고리즘 인터뷰 및 시험이 있을 정도로 점점 알고리즘의 중요도가 점점 더 커져가고 있다. 그래서 이젠 알고리즘을 공부하는 게 중요한데, 알고리즘을 공부하는데 어떻게 공부해야 좋은지 시작하기 어려울 때가 많다. 요즘은 알고리즘을 공부하기 좋은 책들이 많이 나오기도 하고, 알고리즘 문제해결 전략 또는 취업 관련한 알고리즘 등등 여러가지가 있고, 영어 원서 중에서는 Cracking the coding interview 라는 책도 있기도 하다. 우리처럼 돈이 없는 학생들은 조금 부담을 느낄만한 가격을 가지고 있어서 고민이 크다. 그래서 여러가지 방법을 찾아본 결과 국내외에 저지 관련 사이트가 많이 있..
트리(tree)에 대해 알아봤다. 트리는 자료구조의 하나로 우리에게 가장 익숙한 모양의 자료구조라고 할 수 있다. 탐색기처럼 보여지는 구조가 트리 구조라고 할 수 있다. 트리가 어떤 건지는 탐색기라는 것으로 이미 이해할 수 있을 것이라고 생각이 된다. 이젠 트리의 특징에 대해서 공부해보자 위의 그림에서 보듯이 트리는 부모와 자식으로 이루어져 있습니다. 트리의 모습을 그림으로 표현할 때, 각각의 노드(node)와 간선(edge)으로 부모자식간의 연결을 표현하고 가장 위부터 한층한층을 레벨로 표현합니다. 가장 아래층의 레벨이 이 트리의 높이라고 말합니다. 부모가 없는 노드는 항상 최상위 노드이기 때문에 트리의 시작이라는 의미로 루트노드(root node)라고 표현합니다. 그리고 자식이 하나도 없는 노드는 가..
큐는 가장 많이 봤을 법한 구조입니다. 선입선출식이죠 (FIFO : First In, First Out) 편의점에서 유통기한이 빠른 우유부터 내놓고 파는 것처럼 먼저 들어온 데이터를 먼저 내보내는 형식의 자료구조 입니다. 스택과 큐는 서로 반대되는 개념이라고 생각하시면 좋겠네요 간단한 구조입니다. 쉽습니다. 그럼 이것을 어떻게 구현해야할까요? 1..배열 큐( Array queue) 스택과는 달리 가리키는 포인터가 2개가 필요합니다. 큐는 앞뒤 위치를 파악할 수 있습니다. front 와 rear를 가리키고 데이터가 추가될 떄 마다 rear가 증가하고(위에 쌓이니까) 데이터가 추출될 때 마다 front가 증가합니다.(먼저 들어온 순서대로 빠지니까) 이 선형 배열에서는 결국에는 끝이 정해져 있기 때문에 한줄 ..
스택은 후입선출 방식으로 저장하는 방법 입니다.(LIFO : Last In, First Out) 이 데이터를 Task라고 생각을 한다면, 좋은 예로 안드로이드 어플리케이션으로 들 수가 있습니다. 핸드폰에서 작업내용을 보면 가장 최신으로 실행한 어플이 앞에 나오죠? 액티비티를 실행시켜도 가장 마지막에 누른 버튼으로 부르는 액티비티를 볼 수 있습니다. 이를보면 가장 마지막에 실행한 액티비티, 어플리케이션부터 실행을 하는 방법을 스택이라고 합니다. 프로그래밍을 하다보면 task 관리에서 가장 자주 마주치는 자료구조라고 생각하시면 됩니다. 아래의 그림을 보시면 좀 더 이해하기 쉬울 것 같습니다. 푸시는 데이터를 스택에 넣는 작업을 의미하고,팝은 스택에서 데이터를 꺼내는 작업을 의미합니다. 스택에서는 위의 그림처..
C언어로 해보는 링크드 리스트 LInked List를 이해학기 위해 좋은 자료를 만들어봤습니다. 링크드 리스트는 기존의 배열을 사용함에 있어서 문제점을 해결하는 것입니다. 아래의 자료처럼 배열은 초기화시에 배열공간을 선언하면 해당하는 공간만 사용이 가능합니다. 그래서 자료가 추가/삭제 되었을 경우 공간이 모자라거나 남아서 메모리를 낭비/부족하게 되는 경우가 생기게됩니다. 위는 데이터 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}를 추가하고 중간에 6을 삭제하는 데이터 처리를 했더니 배열에서는 공간이 부족하여 11이 못들어가고, 6을 삭제했더니 중간에 한칸이 비어버려서 메모리가 낭비하는 일이 발생합니다. 링크드 리스트를 사용하면 이런 메모리의 낭비를 줄일 수가 있습니다. 공간이 필요하면 ..