'항해 중/알고 보면 알기 쉬운 알고리즘' 카테고리의 글 목록
본문 바로가기

항해 중/알고 보면 알기 쉬운 알고리즘19

그래프, BFS & DFS 👀 그래프란? 👉 연결되어 있는 정점과 정점 간의 관계를 표현 할 수 있는 자료구조 저번에 트리를 배우면서 배웠던 "비선형 구조" 에 대해 기억 나시나요? 비선형 구조는 표현에 초점이 맞춰져 있다고 말씀 드렸는데, 선형구조는 자료를 저장하고 꺼내는 것에 초점이 맞춰져 있고, 비선형구조는 표현에 초점이 맞춰져 있습니다. 그래프는 바로 연결 관계에 초점이 맞춰져 있습니다. 페이스북을 예시로 들어볼게요! 제가 친구 "제니"를 알고 있고, "로제"와 친합니다. 그리고 "로제"는 트와이스 "사나"를 안다고 하면, 저는 "사나"와 2촌 관계라고 말할 수 있겠죠! 👀 그래프에서 사용되는 용어 👉 노드(Node): 연결 관계를 가진 각 데이터를 의미합니다. 정점(Vertex)이라고도 합니다 👉 간선(Edge): 노드 .. 2021. 11. 14.
힙 - 원소 추가하기, 원소 삭제하기 👀 힙이란? 👉 힙은 데이터에서 최댓값과 최솟값을 빠르게 찾기 위해 고안된 완전 이진 트리(Complete Binary Tree) 항상 최대의 값들이 필요한 연산을 할 때 힙을 사용합니다. 힙은 항상 큰 값이 상위 레벨에 있고 작은 값이 하위 레벨에 있도록 하는 자료구조입니다. 다시 말하면 부모 노드의 값이 자식 노드의 값보다 항상 커야 합니다. 그러면 가장 큰 값은 모든 자식보다 커야 하기 때문에 가장 위로 가겠죠! 따라서 최대의 값들을 빠르게 구할 수 있게 되는 것입니다. (반대도 같은 원리입니다.) 참고로, 힙은 다음과 같이 최댓값을 맨 위로 올릴 수도 있고, 최솟값을 맨 위로 올릴수도 있습니다. 👀 최댓값 힙(Max Heap)에 원소 추가하기 👉 힙의 규칙 "힙은 항상 큰 값이 상위 레벨에 있고 .. 2021. 11. 14.
트리 - 이진 트리, 완전 이진 트리 트리라는 자료구조를 이용하면 계층 구조의 데이터를 쉽게 표현 할 수 있습니다. 👀 트리란? 👉 뿌리와 가지로 구성되어 거꾸로 세워놓은 나무처럼 보이는 계층형 비선형 자료구조입니다. (계층형 자료구조란 데이터가 트리 형태의 구조로 조직된 것) 앞에서 살펴 보았던 큐(Queue), 스택(Stack)은 자료구조에서 선형 구조라고 합니다. 👉 형태적 차이점 선형 구조란 자료를 구성하고 있는 데이터들이 순차적으로 나열시킨 형태를 의미합니다. 비선형 구조는 선형구조와는 다르게 데이터가 계층적 혹은 망으로 구성되어있습니다. 👉 용도적 차이점 선형 구조는 자료를 저장하고 꺼내는 것에 초점이 맞춰져 있고, 비선형 구조는 표현에 초점이 맞춰져 있습니다. (하나의 데이터의 밑에 밑에 어떤 데이터가 있는 지가 더 중요하다면 .. 2021. 11. 14.
해쉬 - 해쉬 테이블, 해쉬 함수, 체이닝, 개방 주소법 👀 해쉬란? 👉 해쉬 알고리즘을 통해서 문자열을 고정된 길이의 데이터로 만드는 방식 (미니 프로젝트에서 비밀번호 암호화 할 때 사용한 게 해쉬였다!) 해쉬를 사용하면 블록체인이라는 기술에서도 쓰이기도 하고, 효율적인 자료구조인 딕셔너리를 만들 때도 사용 됩니다! 👀 딕셔너리란? 👉 사전형 데이터를 의미하며, key와 value를 1대1로 대응시킨 형태입니다. (참고 사이트 http://tcpschool.com/python/types_dictionary) 👀 해쉬 테이블이란? 컴퓨팅에서 키를 값에 매핑 할 수 있는 구조인, 연관 배열 추가에 사용되는 자료구조이다. 해쉬 테이블은 해쉬 함수를 사용하여 색인(index)을 버킷(bucket)이나 슬롯(slot)의 배열에 계산합니다. 데이터를 다루는 기법 중에 .. 2021. 11. 13.
스택, 큐 👀 스택과 큐란? : 스택과 큐는 들어가고 나오는 곳이 정해져 있는 자료구조입니다! 👀 스택이란? 👉 한쪽 끝으로만 자료를 넣고 뺄 수 있는 자료 구조를 말합니다. (선입후출?) 실생활적인 예시를 들어 보자면 스택이라는 자료 구조는 "빨래통"을 떠올리시면 됩니다. 데이터를 한 곳에서만 넣었다 뺄 수 있습니다. 가장 밑에 있는 빨래를 뺄 수 있나요? 아니요!! 가장 위에 있는 빨래를 빼거나 넣을 수 있습니다. 그러면 가장 처음에 넣은 빨래는? 가장 늦게 나오겠죠!! 가장 마지막에 넣은 빨래는? 가장 빨리 나옵니다!! 이런 자료 구조를 Last In First Out이라고 해서 LIFO라고 부릅니다. 👀 그렇다면 이런 자료구조는 왜 필요할까요? 👉 바로, 넣은 순서를 쌓아두고 있기 때문입니다. 그 순서가 필.. 2021. 11. 13.
정렬 - 버블정렬, 선택정렬, 삽입정렬 👀 정렬이란? 👉 데이터를 순서대로 나열하는 방법을 의미합니다. 정렬은 알고리즘의 굉장히 중요한 주제입니다. 이진탐색을 가능하게도 하고, 데이터를 조금 더 효율적으로 탐색 할 수 있게 만들어 주기 때문입니다! 다음과 같이 책이 꽂혀 있을 때, 가나다 순으로 정렬 해달라는 것을 의미합니다. 숫자로만 이루어진 배열을 오름차순으로 정렬 해보면 다음과 같습니다. [4, 6, 2, 9, 1] # 정렬되지 않은 배열 [1, 2, 4, 6, 9] # 오름차순으로 정렬된 배열! [9, 6, 4, 2, 1] # 내림차순으로 정렬된 배열! 말로 설명 해보라고 하면 생각보다 설명하기 힘들다는 걸 느낄 수 있습니다! 아래와 같이 컴퓨터에게 정렬을 시키기 위해서는 명확한 과정을 설명 해줘야 합니다. 👀 버블정렬이란? 👉 가장 .. 2021. 11. 13.
재귀함수 - 팩토리얼, 회문 검사 👀 재귀란? : 어떠한 것을 정의 할 때 자기 자신을 참조하는 것을 말한다. 👀 재귀함수란? : 자기 자신을 호출하는 함수이다. 👉 예시를 들어서 설명을 하자면 더보기 어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었습니다. 🥺 "재귀함수가 뭔가요?" 🥸 "잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어. 마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지. 그의 답은 대부분 옳았다고 하네. 그런데 어느날, 그 선인에게 한 선비가 찾아와서 물었어. 🥺 "재귀함수가 뭔가요?" " 🥸 잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을... 그렇다면 재귀 함수를 사용하는 이유는 무엇일까요?? 바로, 재귀 함수를 이용해서 간결하고 효.. 2021. 11. 13.
이진 탐색, 순차 탐색 👀 이진 탐색이란? : 데이터가 정렬되어 있는 배열에서 특정한 값을 찾아내는 알고리즘입니다. 배열의 중앙에 있는 임의의 값을 선택하여 찾고자 하는 값 X와 비교합니다. X가 중간 값보다 작으면 중간 값을 기준으로 좌측의 데이터들을 대상으로 X가 중간 값보다 크면 중간 값을 기준으로 우측의 데이터들을 대상으로 다시 탐색합니다. 동일한 방법으로 다시 중간의 값을 임의로 선택하고 비교하여 해당 값을 찾을 때까지 이 과정을 반복합니다. 👀 순차 탐색이란? : 데이터가 담겨이는 배열을 앞에서 부터 하나씩 비교해서 원하는 데이터를 찾는 방법 👉 이진 탐색과 순차 탐색 과정 비교 👉 업다운 게임을 예로 들어 이진 탐색과 순차 탐색을 비교 해보겠습니다. 👉 순차 탐색을 사용한 예제 풀이 finding_target = .. 2021. 11. 13.
클래스, 객체, 생성자, 메소드 👀 클래스란? : 클래스는 분류, 집합과 같은 속성과 기능을 가진 객체를 총칭하는 개념이다. 👀 객체란? : 세상에 존재하는 유일무이한 사물입니다. 예를 들어 클래스가 사람이라면, 객체는 유재석이 될 수도 있고, 박명수가 될 수도 있습니다. 클래스가 동물이라면, 객체는 강아지가 될 수도 있고, 고양이가 될 수도 있습니다. 이처럼 클래스를 이용하면 같은 속성과 기능을 가진 객체들을 묶어서 정의 할 수 있습니다. class Person: pass # 여기서 pass 는 안에 아무런 내용이 없다는 의미입니다! person_1 = Person() print(person_1) # # 클래스를 호출해서 person_1이라는 객체를 생성한다. person_2 = Person() print(person_2) # # 클.. 2021. 11. 13.
728x90