Skip to content
Home » 자료 구조 정리 | 개발자라면 무조건 알아야하는 자료구조! 5분컷. 5575 투표 이 답변

자료 구조 정리 | 개발자라면 무조건 알아야하는 자료구조! 5분컷. 5575 투표 이 답변

당신은 주제를 찾고 있습니까 “자료 구조 정리 – 개발자라면 무조건 알아야하는 자료구조! 5분컷.“? 다음 카테고리의 웹사이트 https://kk.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: https://kk.taphoamini.com/wiki/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 노마드 코더 Nomad Coders 이(가) 작성한 기사에는 조회수 63,471회 및 좋아요 2,200개 개의 좋아요가 있습니다.

자료 구조 정리 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 개발자라면 무조건 알아야하는 자료구조! 5분컷. – 자료 구조 정리 주제에 대한 세부정보를 참조하세요

#스택 #큐
니꼬쌤이 설명해주면 자료구조\u0026알고리즘도 겁나 쉽슴!
#알고리즘 #자료구조 #데이터구조 #stack #queue
이제는 알아야하지 않겠음?

📌 니콜라스와 무료로 코딩 공부하기
https://nomadcoders.co

자료 구조 정리 주제에 대한 자세한 내용은 여기를 참조하세요.

자료구조 정리 – velog

웍스모바일 면접 후기 등을 찾아보면서 공부해야겠지만 그 전에, 자료구조 등 기본적인 것들은 공부를 확실히 해야겠다는 생각이 들어, 여기다 정리 …

+ 여기에 자세히 보기

Source: velog.io

Date Published: 1/26/2022

View: 2511

자료구조 정리 – 티스토리

자료구조 정리 · 1. 배열. 1) 정의. 같은 자료형을 갖는 여러 데이터를 하나의 변수 이름으로 모아놓은 데이터의 집합체. 2) 특징 · 2. 연결리스트. 1) 정의.

+ 더 읽기

Source: pyoungt.tistory.com

Date Published: 3/22/2021

View: 2124

자료구조 핵심정리 – Algorithm – 개발자를 향하여 – Tistory

자료구조 (Data Structure). a) 배열(Array). https://wikocs.net/22958. 한가지 데이터 타입의 데이터를 순차적으로 저장 및 정렬하는 자료구조 …

+ 여기에 자세히 보기

Source: devraphy.tistory.com

Date Published: 5/23/2022

View: 5337

Data Structure – 자료구조 정리 – Mk’s Blog

알아두면 쓸모있는 자료구조 정리. … 구조체(struct) 안에 데이터와 다음 구조체를 가리키는 부분이 있는 데이터 구조. 양방향 연결 리스트는 다음 …

+ 자세한 내용은 여기를 클릭하십시오

Source: moons08.github.io

Date Published: 10/26/2021

View: 9130

열혈 자료구조 정리(完) – 1D1C – 티스토리

열혈 자료구조 정리(完). _SYPark 2021. 1. 25. 00:13. 320×100. 회사 스터디 정리 및 공부용으로 정리하려고 합니다. 책은 오렌지 미디어의 윤성우의 열혈 자료구조와 …

+ 여기에 표시

Source: 1d1cblog.tistory.com

Date Published: 2/20/2021

View: 5974

[자료구조] 자료구조의 정리 – 고코딩

그럼 왜 자료 구조를 알아야 하는것일까? 컴퓨터에는 메모리,CPU, 스토리지가 존재하는데 데이터가 중구난방으로 존재하게 되면 CPU가 메모리나 스토리지 …

+ 여기에 자세히 보기

Source: go-coding.tistory.com

Date Published: 4/3/2022

View: 7561

[기술면접]자료구조 정리 – 공부하는 스누피 – 티스토리

– 스택, 큐 둘다 선형 자료구조이다. – 스택은 선입후출LIFO 형식이고, 재귀 알고리즘의 작동 원리이다. – 큐는 후입후출FIFO 형식이고, 넓이 우선 …

+ 여기에 보기

Source: snoop-study.tistory.com

Date Published: 8/1/2022

View: 96

자료 구조 한방에 정리

자료 구조 한방에 정리. wookkl 2020. 12. 15. 23:33 … 4. Queue 5. Hash Table 6. Graph 7. Tree. Array. Array는 물리적 주소와 논리적 주소 같은 자료구조이다.

+ 여기를 클릭

Source: wookkl.tistory.com

Date Published: 7/5/2022

View: 7162

[자료구조] 자료구조란? (자료구조를 배우는 이유) – 하나몬

서로 다른 형태의 데이터를 하나의 방법으로만 정리하고 활용한 예시. 모든 숫자를 전화번호부를 작성할 때처럼, 숫자를 3개 또는 4개씩 묶음짓고 …

+ 더 읽기

Source: hanamon.kr

Date Published: 2/9/2021

View: 6721

주제와 관련된 이미지 자료 구조 정리

주제와 관련된 더 많은 사진을 참조하십시오 개발자라면 무조건 알아야하는 자료구조! 5분컷.. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

개발자라면 무조건 알아야하는 자료구조! 5분컷.
개발자라면 무조건 알아야하는 자료구조! 5분컷.

주제에 대한 기사 평가 자료 구조 정리

  • Author: 노마드 코더 Nomad Coders
  • Views: 조회수 63,471회
  • Likes: 좋아요 2,200개
  • Date Published: 2021. 8. 15.
  • Video Url link: https://www.youtube.com/watch?v=Nk_dGScimz8

자료구조 정리

2019-06-01 16:00 작성된 포스트

Naver Campus Hackday 2019 우수 참가자로 선정되어, 네이버 계열사인 (주)웍스모바일 에 기술면접을 보게 되었다(무려 1시간이나.. ㄷㄷ). 웍스모바일 면접 후기 등을 찾아보면서 공부해야겠지만 그 전에, 자료구조 등 기본적인 것들은 공부를 확실히 해야겠다는 생각이 들어, 여기다 정리하면서 공부하기로 했다.

Array & LinkedList

우선 자료구조의 기본이라고 할 수 있는 Array 에 대해서 보자. Array는 논리적 순서와 물리적 순서가 일치한다. 따라서 index값을 통한 원소 접근이 용이하며, 구현이 쉽다. 단점으로는 삽입, 삭제 등에 대한 연산에 필요한 Cost가 높다는 것이다. 삭제의 경우 순서를 맞추기 위해, 뒤의 원소들을 모두 앞으로 Shift연산을 해줘야 하며, 삽입의 경우도 삽입한 인덱스 포함, 그 뒤의 인덱스들에 Shift 연산을 해줘야 한다.

배열의 삽입/삭제 연산에 대한 비효율성을 극복하고자 등장한 것이 LinkedList 이다. Array와 LinkedList의 차이점은, Array는 논리적, 물리적 저장이 순서대로 되어있으나, LinkedList는 논리적으론 순서대로 되어있으나 물리적으론 순서대로 되어있지 않다. 대신 LinkedList는 각 원소가 다음 index 위치에 해당하는 물리적 주소를 가지고 있다. 그렇기에 삽입/삭제시에는 데이터를 Shift할 필요 없이, 해당되는 원소의 물리적 주소만 변경해주면 된다. 하지만 이 같은 특징 때문에 원하는 index를 참조하려면, 1번 index부터 차례대로 접근해야 한다는 비효율성이 있다.

Stack & Queue

Stack 은 선형 자료구조의 일종으로, FILO(First In Last Out)의 대표적인 예시로 들 수 있으며, 말 그대로 먼저 들어갔다가 나중에 나오는 구조이다. 즉 가장 나중에 들어간 원소가 가장 먼저 나오게 된다. 미로찾기, 괄호 유효성 체크 등에 활용된다.

Queue 역시 선형 자료구조이며, Stack과는 반대로 FIFO(First In First Out) 구조이다. 줄을 선다는 뜻과 같게, 먼저 들어간 원소가 가장 먼저 나온다. 작업 우선순위, Heap 구현 등에 사용된다.

Tree

Tree 는 Stack, Queue와는 다르게 비선형 자료구조로, 계층적 구조를 표현하는 자료구조이다. 실제 데이터를 삽입하고 삭제한다는 생각 이전에, 표현에 집중하자. 트리의 구성 요소는 다음과 같다.

Node (노드) : 트리를 구성하고 있는 원소 그 자체를 말한다.

Edge (간선) : 노드와 노드사이를 연결하고 있는 선을 말한다.

Root(Node) : 트리에서 최상위 노드를 말한다.

Terminal(Node) : 트리에서 최하위 노드를 말한다. Leaf Node라고도 한다.

Internal(Node) : 트리에서 최하위 노드를 제외한 모든 노드를 말한다.

(이미지 출처 : http://blog.daum.net/_blog/BlogTypeView.do?blogid=0JHcJ&articleno=8382646&categoryId=791705®dt=20100728174800)

Binary Tree (이진트리)

Binary Tree는 Root 노드를 포함, Leaf 노드를 제외한 모든 노드의 자식이 두 개인 것을 말한다. 공집합 역시 노드로 인정한다. 노드로 이루어진 각 층을 Level 이라 하며, Level의 수를 이 트리의 height 라 한다.

이진트리에는 모든 Level이 가득 찬 이진 트리인 Full Binary Tree(포화 이진 트리) 와 위에서 아래로, 왼쪽에서 오른쪽으로 순서대로 채워진 트리인 Complete Binary Tree(완전 이진 트리) 가 있다(두 트리의 차이점을 알아두면 좋을 것 같다). 배열로 포화 이진트리와 완전 이진트리를 구현했을 때, 노드의 개수 n에 대해서 i번째 노드에 대해서 parent(i) = i/2 , left_child = 2i, right_child = 2i + 1 의 인덱스 값을 갖는다.

BST, Binary Search Tree (이진 탐색 트리)

자료구조에서 효율적인 탐색 방법만을 고민할 것이 아니라, 효율적인 저장방법도 고민해야 한다. Binary Search Tree (이진 탐색 트리)는 이진 트리이며, 데이터를 저장하는 특별한 규칙이 있다. 그 규칙으로 찾고자 하는 데이터를 찾을 수 있다.

이진 탐색 노드에 저장된 값은 유일한 값이다. 루트 노드의 값은 왼쪽에 있는 모든 노드의 값보다 크다. 루트 노드의 값은 오른쪽에 있는 모든 노드의 값보다 작다. 각 서브 트리별로 2, 3번 규칙을 만족한다.

저장할 때 위의 규칙대로 잘 저장하기만 하면, 루트 노드로부터 원하는 값을 찾아나가는 것은 어렵지 않을 것이다. 하지만 값이 추가되고 삭제됨에 따라, 한 쪽에만 치우친 Skewed Tree(편향 트리)가 될 가능성이 있다. 이를 해결하기 위해 Rebalancing 이라는 기법을 사용하여 트리를 재조정하게 된다.

(이미지 출처 : https://songeunjung92.tistory.com/31)

평균 탐색시간은 O(logN), 최악 탐색시간은 O(N)

Red Black Tree

RBT(Red-Black Tree)는 위에서 설명한 Rebalancing 기법의 하나로, 기존 이진탐색트리의 삽입, 삭제, 탐색의 비효율성을 개선한 방법이다. RBT는 다음과 같은 규칙을 따른다.

각 노드는 Red 혹은 Black 이라는 색깔을 갖는다. 루트 노드는 Black 이다. 각 말단 노드(NIL)는 Black 이다. 어떤 노드의 색이 Red 라면, 두 자식 노드의 색은 모두 Black 이다. 어느 한 노드로부터 리프노드(NIL)까지의 Black 의 수는 리프노드를 제외하면 모두 같다(이를 Black-Height 라 한다).

RBT 특징으로는 다음과 같다.

Binary Search Tree이므로, BST의 특징을 모두 갖고있다. 루트로부터 말단 노드까지의 최소 경로는 최대 경로의 두 배보다 크지 않다. 이를 Balanced 한 상태라 한다. 노드의 Child가 없을 경우, Child를 가리키는 포인터에 NIL(혹은 NULL)값을 저장한다. 이러한 NIL 노드들을 말단 노드로 간주한다. 말단 노드이기 때문에, 이 노드들의 색은 Black 이다.

RBT에서의 삽입 과정은 다음과 같다. 우선 새로 삽입한 노드를 BST 특성을 유지하며 삽입한 후, 색을 Red 로 칠한다. 이는 Black-Height 의 수를 최대한 유지하기 위해서이다. 삽입 결과 RBT 특성이 위배된다면, 노드의 색을 다시 칠한다. 만일 Black-Height 특성, 즉 위의 5번 규칙이 위배되었다면, Rotation 을 통해 조정한다.

삭제 과정 역시 마찬가지로 우선 BST 특성을 유지하며 노드를 삭제한다. 삭제될 노드의 Child와 색깔로 Rotation 방법이 정해진다(후에 삭제 과정을 자세히 조사하겠다).

Binary Heap

Binary Heap은 배열에 기반한 완전 이진탐색트리이며, Max-Heap과 Min-Heap이 있다. Max-Heap은 상위 노드의 값이 하위 각 노드의 값보다 크며, Min-Heap은 반대로 상위 노드의 값이 하위 각 노드의 값보다 작다(형제 노드끼리는 상관없다). 이 성질을 이용하면 최대, 최솟값을 찾아내는 것이 훨씬 용이하다.

(이미지 출처 : https://ieatt.tistory.com/40)

HashTable

HashTable은 내부적으로 배열을 사용하며, 평균적으로 빠른 탐색속도(O(1))를 갖는다. 평균적으로라는 의미는 충돌을 고려하지 않았을 때이다. Key값을 해시함수를 통하여 인덱스로 변환 후에, 그 인덱스에 집어 넣는다. 만약 다른 Key값을 해시함수를 통과시켰는데 같은 인덱스가 나온다면, 그걸 충돌이라고 한다.

충돌 해소법(Resolve Conflict) 방법에는 기본적인 두 가지 방법이 있다.

Open Address 방식 (개방 주소법)

충돌 발생 시, 다른 인덱스를 찾는다.

Linear Probing : 순차적으로 탐색하여 다음 인덱스를 찾는다.

Quadratic Probing : 2차 함수를 이용해 탐색할 위치를 찾는다.

Double Hashing Probing : 충돌 발생시 새로운 해시함수를 활용하여 주소를 찾는다. Separate Chaining 방식 (분리 연결법)

충돌 발생 시 다른 인덱스를 찾는 대신, 그 인덱스에다가 연결하는 방법.

연결 리스트를 이용하여 연결하는 방법과, Tree(RBT)를 이용하여 연결하는 방법이 있다. 두 방식 모두 Worst Case가 O(M)이다. 데이터의 크기가 크다면 Separate Chaining, 아니라면 Open Address 방식이 더 낫다.

Hashmap의 Resize : 일정 개수이상 크기가 커지면, 해시 버킷의 크기를 두 배로 늘림.

Graph

정점과 간선의 집합이며, 일종의 Tree이다.

Undirected와 Directed Graph가 있는데, 방향성 유무로 결정된다.

Degree란 Undirectd Graph에서 정점에 연결된 간선의 개수이다. Directed Graph에서의 Degree는 방향성이 있기 때문에 둘로 나뉘는데, 나가는 간선의 개수는 Outdegree, 들어오는 간선의 개수를 Indegree라 한다.

가중치 그래프 란 간선에 가중치를 둔 그래프, 부분 그래프 란 한 그래프의 일부 정점 및 간선으로 이루어진 그래프.

그래프의 구현 방법 :

인접 행렬 : 정방 행렬을 사용하여 구현. 연결 관계를 O(1)로 파악 가능. 공간 복잡도는 O(2V) 인접 리스트 : 리스트를 사용하여 구현. 정점간 연결 여부 파악애 오래 걸림. 공간 복잡도는 O(E + V)

탐색 방법에는 깊이 우선 탐색(DFS, Depth First Search)와 너비 우선 탐색(BFS, Breadth First Search)이 있다.

깊이 우선 탐색은 말 그대로 깊숙히 들어가서 탐색하고 나오는 것이며, 유용한 자료구조는 Stack이다.

너비 우선 탐색은 임의의 한 정점에 대해 인접한 정점을 queue에 넣고(enqueue), dequeue연산에서 나온 하나의 정점으로 들어가서 그 정점의 인접한 정점을 다시 Queue에 넣어서 탐색하는 방식. BFS로 찾은 경로는 최단 경로이다.

자료구조 정리

자료구조 정리

반응형

기본 자료구조 종류

선형 자료구조 (linaer)

– 배열 (Array)

– 연결리스트 (Linked List)

– 스택 (Stack)

– 큐 (Queue)

비선형 자료구조 (non-linear)

– 트리 (Tree)

– 그래프 (Graph)

1. 배열

1) 정의

같은 자료형을 갖는 여러 데이터를 하나의 변수 이름으로 모아놓은 데이터의 집합체

2) 특징

– 논리적순서와 물리적 순서가 같다.

– 인덱스를 통해 직접적으로 원소에 접근한다.

– 삽입, 삭제 시 자료의 이동에 따른 오버헤드가 발생하기 때문에 삽입/삭제 연산이 빈번하게 일어나는 연산에서는 부적합하다.

2. 연결리스트

1) 정의

노드 (하나 이상의 데이터 필드와 하나 이상의 링크 필드로 구성)라는 저장구조를 이용해서 선형 리스트를 표현하는 방법

2) 특징

– 논리적순서와 물리적순서가 같지 않다.

– 링크 필드의 조정을 통해 배열보다 비교적 간단하게 삽입/삭제 연산을 할 수 있다.

– 순차접근을 해야하기 때문에 검색시 배열보다는 효율이 떨어지는 편이다.

3) 종류

– 단일 연결리스트 (Singly Linked List) : 노드가 한방향으로만 갈 수 있음, 노드의 끝이 있음

– 이중 연결리스트 (Doubly Linked List) : 각 노드가 이전 노드, 다음 노드에 대해서 참조하는 형태의 연결 리스트

– 단일 연결 리스트 : 노드가 한방향으로만 갈 수 있음, 노드의 끝이 없어 양 노드의 끝이 처음으로 이어질 수 있음

– 이중 연결 리스트 : 노드가 양방향으로 갈 수 있음, 노드의 끝이 없어 양 노드의 끝이 처음으로 이어질 수 있음

3. 스택

1) 정의

한쪽 끝에서만 데이터의 삽입과 삭제가 수행되는 선형 리스트

2) 특징

– 가장 늦게 들어간 데이터가 가장 먼저 나오는 후입선출 (LIFO) 의 형식을 가진다.

– 데이터를 삽입하는 push 연산과 데이터를 출력하는 pop 연산이 있다.

– TOP에서만 데이터의 삽입과 삭제가 수행된다.

4. 큐

1) 정의

한쪽 끝에서는 데이터의 삽입만 수행되고 다른 한쪽 끝에서는 삭제만 수행되는 선형 리스트

2) 특징

– 가장 먼저 들어간 데이터가 가장 먼저 나오는 선입선출 (FIFO) 의 형식을 가진다.

– 가장 앞부분을 front / head라고 하며, 가장 뒷부분을 rear / tail이라고 한다.

5-1. 트리

출처 : https://www.newline.co/books/javascript-algorithms/binary-search-tree-bst

1) 정의

노드라는 정보 항목이 간선으로 연결되어 계층적인 구조를 표현하는 비선형 자료구조

2) 용어

– 서브 트리 (subtree) : 하나의 노드와 그 노드들의 자손들로 이루어진 트리

– 루트 노드(root) : 부모가 없는 노드로 트리는 하나의 루트 노드만을 가진다.

– 노드의 차수 (degree) : 하위 트리 갯수/간선수 (degree)로, 각 노드가 지닌 가지의 수를 말한다.

– 리프 노드(leaf node), 단말 노드 : 자식이 없는 노드를 말한다.

– 비단말노드 : 적어도 하나의 자식을 가지는 노드를 말한다.

– 부모 노드 (parent) :

– 자식 노드 (child) :

– 형제 노드 (sibling) : 같은 부모를 가지는 노드를 말한다.

– 후손(자손, descendent) :

– 조상(선조, ancestor) :

– 레벨 : 루트 노드로부터의 길이

– 높이/깊이 (height, depth) : 루트 노드에서 가장 깊숙히 있는 노드의 깊이로 ‘가장 마지막 레벨 + 1’로 구할 수 있다.

– 차수(degree) : 노드가 가지고 있는 자식 노드의 개수

– 숲

5-2. 이진트리

1) 정의

각 노드의 차수가 2이하(0,1,2)인 순서 트리

2) 특징

– 레벨 i에서의 최대 노드 개수: 2i

– 높이 h인 트리의 최대 노드 개수 : 2h – 1

– n0=n2+1 (n0: 단일 노드의 수, n2: 차수가 2인 노드의 수)

3) 종류

– 포화(perfect) 이진트리 : 모든 리프 노드의 레벨이 동일하고 모든 레벨이 가득 채워져 있는 이진 트리를 말한다.

– 완전(complete) 이진트리 : 부모, 왼쪽 자식, 오른쪽 자식 순으로 채워지는 트리를 말하며, 마지막 레벨을 제외하고 모든 노드가 가득 차 있어야 한다. 또한, 마지막 레벨의 노드도 중간에 빈 곳 없이 왼쪽으로 몰려 있어야 한다.

– 전이진트리 (full) : 노드차수가 0 이거나 2인 이진트리를 말하며 균형 이진트리 (balanced)라고도 한다.

6. 그래프

1) 정의

G = (V, E)

V : 정점(연결해야 할 대상)의 집합

E : 간선(연결선)의 집합

2) 종류

방향성의 위치에 따라 무방향 그래프와 방향그래프로 구분한다.

무방향 그래프 (undirected)

(1,0) = (0,1)

방향이 없기 때문에 어디든 같아 이런식으로() 표현한다.

방향그래프 (directed)

<1,2> =/= <2,1>

방향이 있기 때문에 이렇게<> 표현하며 값이 맞지 않기 때문에 둘은 다르다.

또한 가중치가 있을 경우 가중그래프(weighted)라고 한다.

3) 용어

– 인접(adjacent)

– 부수(incident)

– 부분 그래프 (subgraph)

– 경로(path)

– 경로의 길이(length)

– 차수(degree)

방향 그래프 -> 진입 차수(in-degree), 진출 지수(out-degree)

– 단순 경로(simple path)

– 사이클(cycle)

– 루프(loop)

– 연결(connected)

방향그래프 -> 강력 연결(strongly-connected), 약하게 연결(weakly-connected)

4) 그래프의 구현

인접행렬 (adjacency matrix) : 이중배열을 사용해서 구현

만약 가중치가 없는 그래프일 경우 선이 있냐 없냐인 1,0으로 구성되어 표현됨

인접리스트 (adjacency list) : linkedList 사용해서 구현

반응형

Algorithm – 자료구조 핵심정리

데이터를 어떤 방식으로 저장하고 정렬하느냐에 따라 추출 방식 등 데이터를 처리 및 조작하는데 필요한 코드가 달라진다.

대량의 데이터를 효율적으로 관리하기 위해, 데이터를 저장 및 정렬하는 방식 을 말한다.

https://wikidocs.net/22958

각 데이터마다 index를 부여 하여 데이터 검색에 용이(장점)

한가지 데이터 타입 의 데이터를 순차적 으로 저장 및 정렬하는 자료구조

https://galid1.tistory.com/483

저장될 수 있는 데이터의 최대개수를 미리 정해야한다. 즉, 저장공간의 낭비가 발생 한다. (단점)

이름처럼 데이터를 쌓는 방식(LIFO) 으로 데이터를 저장 및 정렬하는 자료구조

https://beginnersbook.com/2013/12/linkedlist-in-java-with-example/

데이터가 삭제하면 삭제된 데이터의 이전과 다음 데이터의 연결을 재구성 해야한다. (단점)

포인터를 이용해 연결노드를 찾는 시간이 필요하다. (접근속도가 느리다)

노드(Node): 데이터의 저장단위로, 데이터 값과 포인터(주소값)를 한 쌍 으로 구성한다.

크기의 가변성을 구현하기 위해 노드와 포인터를 사용하여 데이터를 저장 및 연결한다.

배열(Array)의 단점이 보완된 형태의 자료구조로, 크기가 가변적인 배열(장점)

연결 리스트와는 다르게, 한 방향이 아니라 앞뒤 양방향으로 검색이 가능 하다. (장점)

이중연결리스트는 이전과 다음 데이터의 주소값을 갖고 있는 연결리스트 다.

Key와 Value를 한 쌍으로 저장하는 자료구조

Key를 Hash함수로 연산하여 나온 결과 값(해시값, 해시주소)으로 Value를 찾는 방식을 사용한다.

Key를 이용하여 Value를 빠르게 검색할 수 있다.(장점)

특정 데이터의 중복을 쉽게 확인할 수 있다.(장점)

저장공간을 많이 필요로 한다(단점). 그러므로 해시테이블은 공간과 탐색시간을 맞바꾼 기법이라고 표현한다.

– 해시테이블의 빠른 검색능력의 이점으로 인해, 해시값의 중복확률을 줄이기 위해 해시테이블의 저장공간을 크게 잡아서 사용한다는 의미다.

열혈 자료구조 정리(完)

728×90

회사 스터디 정리 및 공부용으로 정리하려고 합니다.

책은 오렌지 미디어의 윤성우의 열혈 자료구조와 오렌지 미디어 강좌를 보고 공부 및 정리한 포스팅입니다.

오렌지 미디어에서 볼 수 있는 열혈 자료구조의 강의 영상은 책을 구매하시고 책 뒷편에 포함된 쿠폰 번호를 입력해야 수강이 가능합니다.

※ 책을 꼭 구매하시고 책, 영상과 같이 글을 보시는 것을 추천드립니다.

목차

Chapter01. 자료구조와 알고리즘의 이해

Chapter02. 재귀(Recursion)

Chapter03. 연결 리스트(Linked List) 1

Chapter04. 연결 리스트(Linked List) 2

Chapter05. 연결 리스트(Linked List) 3

Chapter06. 스택(Stack)

Chapter07. 큐(Queue)

Chapter08. 트리(Tree)

Chapter09. 우선순위 큐(Priority Queue)와 힙(Heap)

Chapter10. 정렬(Sorting)

Chapter11. 탐색(Search) 1

Chapter12. 탐색(Search) 2

Chapter13. 테이블(Table)과 해쉬(Hash)

Chapter14. 그래프(Graph)

반응형

[자료구조] 자료구조의 정리

728×90

자료 구조는 현실세계에 존재하는 데이터를 효율적으로 저장할 수 있는 구조화 표현의 개념이라고 할 수 있다. 그럼 왜 자료 구조를 알아야 하는것일까?

컴퓨터에는 메모리,CPU, 스토리지가 존재하는데 데이터가 중구난방으로 존재하게 되면 CPU가 메모리나 스토리지에 저장되어있는 데이터를 찾는데 오랜시간이 소비되게 된다. 이 말은 즉, 프로그램의 속도를 저하시키게 된다. 데이터가 자료구조의 개념에 기반하여 저장되어있다면 CPU가 자료를 찾는데 드는 시간은 짧아지고 효율적이 사용이 될 것이다.

자료 구조의 분류는 단순구조, 선형구조, 비선형구조, 파일구조로 나뉘어져 있다.

단순 구조

프로그래밍시 변수도 크기가 커지면 여러공간에 변수를 나눠서 저장하게 된다. 변수의 데이터 타입에 따라 구조도 바뀌게 된다

선형 구조

자료가 저장 관계가 1:1인 경우이다. 쉽게 말해 자료가 한줄로 똑바로 서있다고 생각하면 된다.

비선형 구조

자료의 저장 관계가 1:N인 경우이다. 복잡하지만 효율적인 자료구조이다.

파일 구조

서로 관련된 필드들로 구성된 레코드의 집합인 파일에 대한 자료구조 이다.

가장 많이 접하고 사용되는 선형구조와 비선형 구조에 대해서 알아보자.

선형구조

선형구조에서 가장많이 쓰이는 용어는 FIFO 와 LIFO 이다.

FILFO(First In First Out) : 가장 먼저들어온 데이터가 가장 먼저 출력된다.

LIFO(Last In First Out) : 가장 나중에 들어온 데이터가 가장 먼저 출력된다.

스택(Stack) 구조

스택은 Push()와 Pop()기능 으로 이루어져있는 자료구조이다. Push()를 하면 스택안에 자료 순차적으로 쌓이게 되고 가장 최근에 들어온 자료는 Top이 되어진다. Pop()을 하면 가장 최근에 들어온 자료가 방출되게 된다. 즉 Top인 자료가 방출되고 그 밑에 있는 자료가 Top이 된다. 스택(Stack)은 FILO이다

ex)괄호 검사, 역순 문자열 만들기, 후위 표기법으로 변환…

큐(Queue) 구조

큐도 Push()와 Pop()기능이 있다. Push는 삽입, Pop은 삭제 기능이다. 큐는 한쪽 끝(rear) 에서는 삽입연산만 이루어지고 다른 한쪽 끝(front) 에서는 삭제연산만 이루어지는 유한 순서 리스트이다.

보통 데이터가 입력된 순서대로 처리해야 하는 경우에 많이 사용된다. ex)은행 번호표, 콜센터, BFS…

먼저 삽입된 Item이 먼저 삭제가 이루어지는 FIFO구조이다.

덱(Deque) 구조

큐와 구조가 비슷하지만 덱은 앞뒤 모두에서 Push와 Pop기능이 가능하다.

비선형 구조

비선형 자료구조는 하나의 자료 뒤에 여러개의 자료가 존재할 수 있는 것이다. 1:N의 관계를 가지고, 계층적 구조를 나타내기에 적당하다.

트리(Tree) 구조

트리(Tree)구조는 노드(Node)와 간성(Branch)을 이용하여 사이클을 이루지 않도록 구성한 그래프 형태 이다. 부모와 자식간의 계층 구조가 명확하다.

그래프(Graph) 구조

노드와 간선으로 이루어져있는 사이클 형태의 그래프이다.

사실 자료구조는 개념을 외우는것보다 각 자료구조의 개념을 이해하고 그림으로 그려보는것이 중요하다. 자료구조의 특성상 데이터의 Push와 Pop이 많고 순서가 자주 바뀌게 되어 그림으로 그리면서 이해하는 것이 무엇보다 중요하다. 위 글을 읽으면서 각 자료구조가 어떻게 작동하고 어떻게 생겼는지 그림을 한번씩만 그려보아도 이해하는데 큰 도움이 될것이다.

728×90

[기술면접]자료구조 정리

kjsu0209.github.io/Tech-Interview/data-structure/ds

1. 스택과 큐

– 스택, 큐 둘다 선형 자료구조이다.

– 스택은 선입후출LIFO 형식이고, 재귀 알고리즘의 작동 원리이다.

– 큐는 후입후출FIFO 형식이고, 넓이 우선 탐색에 사용된다.

– 큐는 스택 2개로 만들 수 있다. 큐에 들어온 값을 넣는 스택 a, dequeue 요청된 값을 넣는 스택 b를 구현한다.

– dequeue는 b가 비어있다면 a를 모두 pop하여 b에 넣은 후 b를 pop하면 된다. b가 비어있지 않다면 그냥 pop하면 된다.

a = [] b = [] for i in input: c = input(‘Command (I/D): ‘) if c == ‘I’: a.append(input()) elif c == ‘D’: if len(b) == 0: while len(a) != 0: b.append(a.pop()) print(b.pop()) else: print(b.pop())

2. 배열과 연결 리스트의 장단점

– 배열은 인덱스로 순차적으로 메모리에 접근할 수 있으나, 메모리 길이가 정적이기 때문에 삽입, 삭제 등 변경이 비효율적이다.

– 연결 리스트는 노드와 링크를 구조화한 자료구조로, 메모리 저장 위치에 구애받지 않아 데이터 재구성 및 삽입, 삭제가 용이하다. 인덱스로 메모리 접근이 어려워 순차적으로 접근해야 해 탐색 속도가 느리다.

3. 연결 리스트에서 한번에 중간값을 찾을 수 있는 방법은?

Two-pointer를 사용하면 된다. 포인터 하나는 노드를 한개씩 탐색하고, 다른 포인터는 노드를 2개씩 탐색한다. 2개씩 탐색하는 포인터가 리스트의 끝에 도달할 때, 한개씩 탐색하는 포인터가 가리키는 노드가 중간값이다.

4. 원형 연결 리스트인지 확인할 수 있는 방법은?

Two-pointer를 사용하면 된다. 포인터 하나는 노드를 한개씩 탐색하고, 다른 포인터는 노드를 2개씩 탐색한다. 2개씩 탐색하는 포인터가 한개씩 탐색하는 포인터를 따라잡을때, 두 포인터는 같은 노드를 가리키게 된다. 연결 리스트에 loop가 발생하는 경우에서만 가능하다.

5. 1에서 100까지의 정수가 있는 배열에서 한개가 중복되었다. 어떻게 찾을까?

n(n-2)/2는 1부터 n까지의 수를 더한 값이다. 따라서 배열의 요소를 모두 더하고, 1에서 100까지 더한 값을 빼면 중복된 값을 알 수 있다.

6. 자바에서 문자열을 뒤집는 방법은?

StringBuffer가 가장 간단한 방법이다.

StringBuffer를 사용하지 않고는 재귀를 사용하면 된다. return할 때 인자로 받은 문자열의 1번 인덱스부터 마지막 인덱스까지 범위의 문자열을 재귀 호출하고, 그 return값의 뒤에 문자열의 0번 인덱스 문자를 붙이면 된다.

public void reverseString(String s){ if(s.length <= 1){ return s; } return reverseString(s.substring(1)) + s.charAt(0); } 7. 이진 탐색 트리 설명 - 이진 트리를 이용한 자료구조로, 중위 순회를 통해 정렬된 값을 얻을 수 있다. - 단점은 반정렬상태로, 부모-자식 관계에서만 대소 관계를 만족한다. - 편향트리가 되었을 때, 최악의 경우 배열의 정렬과 다름없다. - 이진 탐색 트리의 4가지 조건: 모든 노드의 값은 유일하고, 왼쪽 서브트리의 모든 값은 루트의 값보다 작아야 한다. 오른쪽 서브트리의 모든 값은 루트의 값보다 커야 한다. 서브트리도 이진 탐색 트리여야 한다. - 탐색: 찾는 데이터와 노드의 값을 비교하여, 노드의 값이 크면 왼쪽 자식노드로 이동하고, 작으면 오른쪽 자식노드로 이동한다. 노드의 값이 같으면 탐색을 종료한다. - 삽입할 때는 탐색과 같은 과정으로 적절한 삽입 위치를 탐색한 뒤 삽입한다. - 삭제는 이진 탐색 트리의 조건을 위배하지 않도록 한다. => 삭제할 노드의 자식 노드가 있을 때!!

=> 1개 있을 때: 삭제할 노드의 자식노드와 부모노드를 연결한다.

=> 2개 있을 때: 중위 순회했을 때 바로 앞의 값과 뒤의 값으로 메꿔 넣는다. 앞의 값은 왼쪽 서브트리에서 가장 큰 값, 뒤의 값은 오른쪽 서브트리에서 가장 작은 값이다.

8. 해시 테이블에서 Collision발생 시 해결법

충돌(Collision)은 서로 다른 key값을 해시함수로 변경했을 때, 같은 해시값이 나올 경우 발생한다.

=> 체이닝(Chaining): 충돌이 발생한 레코드들을 연결 리스트로 연결한다.

=> 개방 주소법(Open Addressing): 충돌 발생 시 삽입 방법에 따라 다른 버켓(메모리)에 데이터를 삽입한다.

1) 선형 탐색: 다음 빈 버켓에 삽입

2) 제곱 탐색: 제곱만큼 건너뛰어서 삽입

3) 이중해시: 한번 더 해시함수 적용

9. 그래프와 트리 차이점

– 그래프는 노드와 노드를 연결하는 간선을 모아 놓은 자료구조이다.

– 트리는 그래프의 일종으로, 순환되지 않는 방향그래프이다.

– 트리는 계층 구조를 가진다. 루트 노드를 제외한 자식노드는 한 개의 부모노드만 가진다.

– 그래프는 네트워크 구조를 가진다. 부모-자식 노드 간의 개념이 없다.

– 그래프에서는 노드 간 다양한 경로를 구할 수 있지만, 트리는 하나의 경로만 가진다.

10. 우선순위 큐 구현방법 설명

우선순위 큐는 데이터들이 우선순위를 가지고 있고, 우선 순위가 높은 데이터가 먼저 나가는 힙 구조이다. 배열로 구현할 수 있다.

– 배열의 1번째 인덱스부터 사용한다.

– 왼쪽 자식의 인덱스 = 부모 인덱스*2

– 오른쪽 자식의 인덱스 = 부모 인덱스*2 +1

– 부모 인덱스 = 자식 인덱스 / 2

– 삽입: 마지막 노드에 삽입. 힙의 성질을 유지할 때까지 부모노드와 교환한다.

– 삭제: 루트 노드가 삭제된다. 마지막 노드를 루트 노드에 위치시킨 후, 제자리를 찾을 때까지 자식노드와 비교해가며 교환한다.

우키의 개발 블로그 우키의 개발 블로그

주기적으로 자료구조의 핵심 특징들을 머리에 되새김 하기 위해서 이렇게 한방에 자료구조를 정리하는 포스팅을 올린다!

이미지 출처: https://beginnersbook.com/2018/10/data-structure-array/

Linked List

Linked List는 물리적 주소와 논리적 주소 다른 자료구조이다.

Singly Linked List와 Doubly Linked List로 나뉜다.

Singly Linked List는 노드에 노드의 값과 다음노드의 주소를 가지고 있다. Stack 자료구조 구현시 사용된다. Doubly Linked List는 노드에 노드의 값과 이전노드와 다음노드의 주소를 가지고 있다. Queue자료구조 구현시 사용된다.

장점

삽입, 제거가 빠르다.

빈 공간이 있을 수 없다

크기가 유동적이다.

단점

특정 원소에 접근시에 Front 노드부터 탐색을 시작해야 한다.

배열과 비교헀을때 node마다 이전노드의 주소 또는 다음노드의 주소를 참조해야 하므로 포인터라는 메모리가 추가적으로 필요한다.

이미지 출처: https://beginnersbook.com/2013/12/linkedlist-in-java-with-example/

Stack

Stack은 선형자료구조로써 FILO 또는 LIFO 특성을 가지고 있다. 가장 처음 들어온 원소가 가장 마지막에 나온다는 뜻으로 후에 깊이 우선 탐색시 사용되는 자료구조이다. 배열 또는 링크드 리스트 자료구조로 구현할 수 있다. 배열로 구현할 때에는 스택의 크기가 정해지기 떄문에 오버플로우 현상이 나타날 수 있어 비효율적이다. 따라서, 링크드 리스트 자료구조로 구현하는 것이 효율적이다,

이미지 출처: https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%83%9D

Queue

Queue는 선형자료구조로써 FIFO 특성을 가지고 이다. 가장 처음 들어온 원소가 먼저가 오는 뜻으로 후에 너비 우선 탐색시 사용되는 자료구조이다. 배열 또는 링크드 리스트 자료구조로 구현할 수 있다. 배열로 구현할 때에는 front 노드의 값을 제거할 때 나머지 노드들을 앞으로 옮겨줘야 하기 때문에 비효율적이다. 따라서, 링크드 리스트 자료구조로 구현하는 것이 효율적이다.

이미지 출처: https://en.wikipedia.org/wiki/Queue(abstractdata_type)

Hash Table

Hash Table은 Key-Value로 데이터를 저장하는 자료구조이다. 빠르게 데이터를 검색할 수 있다. 그 이유는 내부에서 배열 또는 버킷을 사용하여 데이터를 저장하기 떄문이다. Hash Table은 각각의 Key값에 해시함수를 적용하여 배열 또는 버킷의 고유한 Index값을 얻고, 이 Index를 통해 값을 검색한다. 해시 함수를 적용시킨 이 해시 테이블의 평균 시간복잡도는 O(1)이다.

이미지 출처: https://en.wikipedia.org/wiki/Hash_table

Graph

노드와 그 노드를 연결하는 간선을 모아 놓은 추상적인 비선형 자료구조이다. 객체와 객체간의 관계를 표현할 수 있는자료구조이다. 노드를 Vertex라고 부르고 노드를 연결하는 간선을 Edge라고 부른다. 뱡향성을 띄고 있는지에 따라 방향 그래프와 무방향 그래프로 나뉜다. 방향 그래프의 대표적인 예시로는 트리가 있다.

그래프 용어

정점(Vertex, Node): 아래 그림에 있는 숫자

간선(Edge, Link): 정점과 정점을 연결하는 선

가중치: 간선에 특정 값을 매기는 것, 쉽게말해 해당 간선을 지나갈때 나타내는 비용

방향 그래프: 방향성이 있는 그래프

무방향 그래프: 방향성이 없는 그래프

self-loop: 정점에서 자기 자신으로 돌아오는 간선

Adjacency: 뱡향성이 있는 방향 그래프에서 간선으로 연결된 인접 정점, 쌍방으로 적용되는 것이 아님, 노드 1은 노드2를 Adjacency하고 노드2는 노드1에 Adjacency하지 못하다고도 할 수 있다.

Degree: 각 정점들에 연결되어 있는 Edge들의 수

Path: 정점1과 정점2로 이동할 수 있는 경로

Cycle: 그레프가 경로를 따라 동일한 정점으로 되돌아올 수 있는 경우

Forest: 그래프중 싸이클이 없고 방향성이 없는 경우 Forest라고 부른다,

이미지 출처: https://www.geeksforgeeks.org/graph-data-structure-and-algorithms/

Tree

그래프의 한 종류 이다. 노드와 노드와 노드를 잇는 간선으로 이루어진 비선형 자료구조이다. 계층적인 특징을 가지고 있다.

특징

단 하나의 루트 노드를 가지고 있다.

부모 노드는 0개 이상의 자식 노드를 가지고 있다.

자식노드는 1개의 부모 노드를 가지고 있다.

트리에는 사이클이 존재할 수 없다.

노드는 순서대로 나열되어 있을 수도 있고 그렇지 않을 수도 있다.

이미지 출처: https://towardsdatascience.com/8-useful-tree-data-structures-worth-knowing-8532c7231e8c

트리의 용어

Root(루트 노드): 최상위의 노드로써 트리는 하나의 루트 노드만을 가진다.

Leaf nodes(말단 노드): 자식이 없는 노드이다

Edge(간선): 노드를 연결하는 선이다.

Sibling(형제 노드): 같은 부모를 가지는 노드이다.

Degree(노드의 차수): 특정 노드의 자식 수를 말한다.

Degree of tree(트리의 차수): 트리의 최대 차수

Height(트리의 높이): 루트 노드에서 가장 깊숙히 있는 노드의 깊이이다.

Subtree(서브트리): 자신의 자식을 루트로 하는 트리를 서브 트리(Sub Tree)라고 부르며 차수와 서브 트리의 개수는 같다.

트리의 종류

이진 트리(Binary Tree): 트리 중에 모든 노드의 차수가 2 이하로 구성하는 트리입니다.

포화 이진 트리(Full Binary Tree, 꽉 찬 이진 트리): 마지막 레벨까지 모든 노드가 있는 이진 트리입니다.

완전 이진 트리(Complete Binary Tree): 노드를 삽입할 때 왼쪽부터 차례대로 추가하는 이진 트리입니다.

사향 트리(Skewed Binary Tree),: 한쪽으로 기울어진 트리, 편향 트리라고도 부릅니다.

트리의 종류

이미지 출처: https://towardsdatascience.com/5-types-of-binary-tree-with-cool-illustrations-9b335c430254

[자료구조] 자료구조란? (자료구조를 배우는 이유)

❗️자료구조를 배우는 이유

✅ 데이터를 체계적으로 저장 하고, 효율적으로 활용 하기 위해서 자료구조를 사용 한다.

✅ 대부분의 자료구조 는 특정한 상황 에 놓인 문제를 해결하는 데에 특화되어 있다.

많은 자료구조를 알아두면 , 특정 문제를 해결하는 데에 상황에 가장 적합한 자료구조 를 빠르게 찾아 데이터를 정리하고 활용 하여 문제를 빠르고 정확하게 해결 할 수 있다.

, 특정 문제를 해결하는 데에 를 빠르게 찾아 하여 할 수 있다. 이것은 문제 해결 능력을 필요로하는 알고리즘과 굉장히 밀접한 연관성이 있다.

결국 문제해결을 하기 위해서 배운다.

❗️자료구조란 무엇일까?

✅ 자료구조 란 여러 데이터들의 묶음을 저장 하고, 사용하는 방법을 정의 한 것이다.

❗️데이터(data)는 무엇일까?

✅ 데이터 는 문자, 숫자, 소리, 그림, 영상 등 실생활을 구성하고 있는 모든 값 이다.

이름, 나이, 키, 집 주소, 목소리, 유전자 DNA까지 데이터로 분류할 수 있다.

✅ 데이터 는 그 자체만으로 어떤 정보를 가지기 힘들다.

예를 들어 나이라는 데이터만 알고 있다면, 사람의 나이인지, 강아지의 나이인지, 나무의 나이인지 알 수 없다.

✅ 데이터 는 분석하고 정리 하여 활용해야만 의미 를 가질 수 있다.

✅ 데이터 를 사용하려는 목적에 따라 형태를 구분 하고, 분류하여 사용 한다.

👉 서로 다른 형태의 데이터를 하나의 방법으로만 정리하고 활용한 예시

모든 숫자를 전화번호부를 작성할 때처럼, 숫자를 3개 또는 4개씩 묶음짓고 하이픈( – )으로 합치는 것은 잘못된 활용이다.

)으로 합치는 것은 잘못된 활용이다. 거리를 구하거나 다섯 자리가 넘는 숫자를 보관할 때는 하이픈( – )이 필요하지 않다.

✅ 필요에 따라 데이터 의 특징을 잘 파악(분석)하여 정리 하고, 활용 해야 한다.

데이터를 정해진 규칙없이 저장하거나, 하나의 구조로만 정리하고 활용하는 것보다

데이터 를 체계적으로 정리하여 저장 해두는 게, 데이터를 활용 하는 데 있어 훨씬 유리 하다.

선배 개발자들은 무수한 상황에 데이터를 효율적으로 다룰 수 있는 여러 방법들이 연구해두었다.

👉 무수한 상황의 예시

번호를 다 알지 않아도, 이름을 아는 것만으로 전화를 할 수 있는 방법은 무엇이 있을까?

웹 브라우저에서 뒤로 / 앞으로 가는 방법은 무엇이 있을까?

게임 매칭을 잡을 때, 수많은 사람들을 통제하는 방법엔 무엇이 있을까? …등등

❗️자료구조의 종류와 구분

무수한 상황에서 데이터를 효율적으로 다룰 수 있는 방법 을 모두 모아, 자료구조 라는 이름을 붙였다.

👉 자주 등장하는 네 가지의 자료구조

Stack, Queue, Tree, Graph

자료구조 카테고리에서는 자료구조와 알고리즘에 대해 학습한 과정과 실제 활용 경험들을 정리하고 공유합니다.

우선 앞서 언급한 “자주 등장하는 네 가지의 자료구조”를 우선적으로 공부하고 실제 알고리즘으로 활용하는 과정을 기록합니다.

이후 나머지 자료구조의 종류에 대해서도 지속적으로 학습하고 공유할 것입니다.

키워드에 대한 정보 자료 구조 정리

다음은 Bing에서 자료 구조 정리 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 개발자라면 무조건 알아야하는 자료구조! 5분컷.

  • 코딩
  • 프로그래밍

개발자라면 #무조건 #알아야하는 #자료구조! #5분컷.


YouTube에서 자료 구조 정리 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 개발자라면 무조건 알아야하는 자료구조! 5분컷. | 자료 구조 정리, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  역 삼각형 등 | 역삼각형 벌어지는 프레임을 갖게해준 등 운동법 26245 투표 이 답변

Leave a Reply

Your email address will not be published. Required fields are marked *