본문 바로가기

Data Structure & Algorithms47

[DSA] Array and String -Reverse String 제대로 코딩 공부좀 시작할려고 leetcode 결제를 감행하였다. 돈이 들어갔으니 열심히 해야한다. 막 방대한 자료를 다루지는않고 좀 더 기본적인걸 주로 다루는걸 GeeksforGeeks와 비교하여 더 최신 트랜드를 따라가는것같아 결정하였다. 오... 코딩 테스트가 이렇게 진행되는구나. Topic : Two pointers : 가장 기본적인 배치문제로 Array를 두 포인터로 위치를 옮겨가며 푸는방법이다. 문제로 스트링을 역순하는문제가 나왔고 어찌저찌풀었는데 오... 내 프로그램이 전체 서밋한 프로그램중에 어느 위치에 차지하고있는지 가르쳐주기까지! 그 이후에 답지는 정말 친절하게 효율적인 코드를 알려준다! 내가 막무가내로 풀었던 제출답 (아니 굳이 소수 짝수 안나눠도 됬구나..) class Solutio.. 2022. 10. 6.
Bubble Sort - 좁은 범위로 알고리즘이나 자료구조가 일한때는 크게 와닿지는 않았는데 기술을 파면 팔수록 기초가 중요하다는걸 느낀다.. 처음로 화이트 보드에 버블 정렬 공부시도해보았다. 꾀나 효과있게 머리속에 정리된다. 버블 정렬이 가장 심플하다고 하는데 나에겐 꾀나 어색한 공부 과정이였다. 앞으로 하나하나 수업에서 필요한것들과 알고리즘을 심도있게 다루게 연습해보자. O(N^2)의 시간 복잡도를 가지며 큰 데이터를 다루는곳에서는 적합하지않다.. 만약 Decreasing order(내림차순) 으로 정렬된다면 최악의 시간 복잡도를 선보인다. 출처: https://www.geeksforgeeks.org/bubble-sort/ 2022. 9. 29.
[DS]Chapter03 연결 리스트 1 [03-1]추상 자료형: Abstract Data Type(ADT) Definition: 구체적인 기능의 완성 과정을 언급하지않고 순수하게 기능이 무엇인지를 나열한 것 * 리스트 사용자에게 사용방법 이외의 불필요한 부분까지 알도록 부담 X. 대충 무엇을 하는지 알려줌 [03-2]배열을 이용한 리스트의 구현 리스트 ---- 순차리스트 : 배열을 기반으로 구현된 리스트 ---- 연결리스트 : 메모리의 동적 할당을 기반으로 구현된 리스트 리스트 자료구조는 데이터를 나란히 저장합니다. 그리고 중복된 데이터의 저장을 막지않습니다. -배열 기반 리스트의 단점 배열의 길이가 초기에 결정되어야 한다. 변경이 불가능하다. 삭제의 과정에서 데이터의 이동(복사)가 매우 빈번하게 일어난다. - 배열 기반 리스트의 장점 데이터.. 2022. 7. 6.
[DS]Chapter 02 재귀 -1 (Recursion) [02-1] 함수의 재귀적 호출의 이해 - 재귀함수의 실질적 이해: " Recursive 함수를 실행하는 중간에 다시 Recursive 함수가 호출된다면 함수의 복사본을 하나 더 만들어서 복사본을 실행하 게된다" * 즉, 완료 되지않은 함수 안에서 복사본을 만든 함수가 계속 호출된다.. 재귀함수를 정의하는데에 탈출 조건은 필수 !!! - 재귀함수 디자인사례 재귀함수는 자료구조나 알고리즘이 어려운 문제를 단순화하는데 사용되는 중요한 무기. 예로 factorial! [02-2] 재귀의 활용 - 피보나치 수열: 여기서 볼것은 함수의 호출 순서를 눈여겨보면 좋을것같다. * 함수안에 계속 실행되며 마치 트리의 전위순위같다. 이진 탐색 알고리즘의 재귀적 구현 2022. 7. 4.
[DS] chapter8 트리 -2 [08-3] 이진 트리의 순회 (Traversal) 순회가 필요한 이유는 삭제할 서브트리가 2개라면 한번의 free함수 호출이 전부이므로 메모리 누수로 이어질수있다. 순회의 종류: - 전위 순회( Preorder Traversal) - 중위 순회(Inorder Traversal) - 후위 순회( Postorder Traversal) - 높이가 2이상인 이진트리의 순회법 1단계 : 왼쪽 서브트리 순회 2단계: 루트노드의 방문 3단계: 오른쪽 서브 트리의 순회 void InorderTraverse(BTreeNode * bt) { InorderTraverse(bt->left); // 1단계 왼쪽 서브트리의 순회 printf("%d \n", bt ->data); // 2단계 루트 노드의 방문 (이게 방문으로~).. 2022. 7. 3.
[DS]chapter8 트리 개념1 [8-1] 트리의 개요 트리를 이용하여 무엇인가를 저장하고 꺼내야한다는 생각은 지운다! 대신 무엇인가를 표현하는 도구라 생각! *무언가 네트워크 처럼 생겼네. 노드도 있고 간선도 있고.. 이진트리(Binary Tree) 와 서브트리(Sub Tree) - 이진 트리의 조건(*Binary니까 두개가 까지) 1. 루트 노드를 중심으로 두 개의 서브 트리로 나뉘어진다. 2. 나뉘어진 두 서브 트리도 모두 이진 트리이어야 한다. (*하나만 트리가 있어도 이진트리! 노드가 존재하지않는다면 공집합 노드가 존재한다고 판단한데) 포화이진트리(Full Binary Tree) 와 완전 이진 트리 (Complete Binary Tree) 포화이진 트리 : 모든 레벨이 꽉 찬 이진 트리 완전이진 트리 : 포화 이진 트리 처럼 .. 2022. 7. 1.
[DS] overview of Data Structure 자료구조를 어떻게 어디서부터 공부해야하나... 메카트로닉스를 나온이상 차근차근 기초를 다져가야겠다.. 일단 윤성우의 열혈자료구조 로 시작! 2022. 7. 1.