몰랐던거(53)
-
[LeetCode] 542. 01 Matrix (파이썬)
542. 01 Matrix - 파이썬 풀이 문제접근 아이디어 구현코드 문제접근 아이디어 해당 문제는 백준에 7569번 토마토라는 문제가 존재하는데 이 문제와 매우 흡사하다. 거의 똑같다. (클릭 시 해당 문제로 이동) 가장 이 문제는 1에서 가장 가까운 0까지의 거리를 적는 문제이다. 그럼 0에서 1까지의 거리를 써주면 된다. 근데 최소거리를 써줘야 하는 문제이기 때문에 값이 0인 인덱스를 전부 Queue에 넣고 빼면서 bfs를 해주면 가장 가까운 0이 제일 먼저 해당 1에 도달을 할 것이다. 그래서 distance값이 초기 설정과 달라지면 최소 거리를 찾은 것이다. bfs를 하는 방법은 인접 인덱스가 인덱스 범위 안에 있거나 방문한 적이 없다면 즉, distance가 초기 값과 같다면 Qu..
2022.07.12 -
Trie
Trie는 단어 집합을 나타내는 문제를 해결하기 위해 만들어진 구조이다. retrieval이란 단어에서 유래되었고 Tree 구조와 구별하기 위해서 '트라이'로 발음된다. Trie는 기본적으론 트리 데이터 구조이지만 생성 및 사용 방법 측면에서 따라야 할 몇 가지 규칙이 있다. Trie는 노드가 알파벳 문자를 저장하는 Tree와 같은 자료구조이다. 특정 방식으로 노드를 구조화하면 Tree의 분기 경로르 따라 이동하여 구조에서 단어와 문자열을 검색할 수 있다. 각 Trie는 가능한 알파벳 값에 대해 하나씩 다른 노드에 대한 링크가 있는 빈 루트 노드가 있다. Trie의 모양과 구조는 항상 연결된 노드의 집합이며 빈 루트 노드에 다시 연결된다. 주목해야 할 점은 Trie의 자식 노드 수가 가능한 총 값 수에 ..
2022.07.09 -
Graph
Tree를 공부하면서 비선형 구조에 대해 공부를 했었다. 비선형 구조는 데이터가 순서를 따르지 않는다는 것이다. 적어도 배열, 링크드 리스트처럼 명백한 숫자는 아니다. 트리는 루트 노드에서 시작해서 다른 노드로 연결했었다. 그래서 하위 트리가 포함되는 재귀적인 특성을 가졌다. 트리에서는 이진 탐색 트리와 같이 모양, 순서에 따라 나눴다. 우리가 사용하기에 효율적인 트리들은 지켜야하는 규칙들이 있었다. 하지만 우리가 이 규칙을 아예 안쓴다면 어떨까? 트리의 개념에서는 안될 것이라 생각하지만 그래프의 개념에서는 다르다. 트리는 더 많은 규칙을 따라야 하는 제한된 유형의 그래프에 불과하다. 그래프와 트리의 다른 점은 트리는 루트 노드에서 자식 노드로 한 방향으로만 흐르고 루프 또는 사이클이 존재할 수 없다. ..
2022.07.06 -
Heap
Heap이란? 힙은 따라야 하는 몇 가지 추가 규칙이 있는 이진 트리이다. 이 두 가지 규칙이 힙을 다른 트리 구조와 구별하는 요소를 정의하는 속성이다. 그 속성은 트리의 모양과 노드의 순서이다. 먼저 모양이다. 이진 트리가 힙이 되려면 완전 트리여야한다. 완전 트리는 트리의 마지막 level을 제외하고는 노드들이 다 채워져 있어야한다. 그리고 트리의 마지막 level에서는 항상 맨 왼쪽 노드가 먼저 채워져야한다. 순서의 규칙은 부모 노드는 자식 노드의 값보다 크거나 같아야 하거나 자식 노드의 값보다 작거나 같아야 한다. 이 두 형식의 순서에 따라서 힙이 분류된다. 최소 힙(min heap)은 루트 포함 모든 상위 노드가 하위 노드보다 값이 작거나 같은 경우이다. 결국 최소 값이 루트 노드가 되는 것이다..
2022.07.05 -
Tree
나무에는 수많은 가지가 존재한다. 그리고 가지처럼 뻗어나간다는 말은 다양한 갈래로 갈 수 있다는 말이고 오늘은 이 나무를 뒤집은 Tree라는 추상 자료형에 대해 알아보자. 자료 구조를 분류하기 위해선 데이터를 저장하는 방식에 대한 부분이 있지만 그거보다 더 큰 범주에는 선형인지 비선형인지가 있다. 즉, 데이터가 구성되고 탐색되는 방식에 sequence와 order가 있는지 여부이다. 배열이나 링크드 리스트 같은 선형 데이터 구조에서 데이터는 순서가 지정되고 순서가 매우 중요하다. 순차적으로만 순회할 수 있기 때문이다. 그러나 비선형 데이터 구조도 있다. 까다롭고 다루기 어려울 수 있지만 선형 데이터 구조를 이해했다면 무리가 없을 것이다. 비선형 자료 구조는 실제로 순서를 따르지 않는다. 순서대로가 아니다..
2022.07.05 -
Queue, Stack
우리가 생활함에 있어서 어떤 작업이나 요청들을 처리할때 가장 쉽게 어떤 순서로 처리할까? 예를 들어, 내가 어떤 가게의 종업원이 되었다고 생각해보자. 요리를 하시는 사장님께 주문이 들어왔음을 알리는 순서를 어떤 식으로 구성할까? 일반적으로는 그냥 들어오는 순서대로이다. Queue가 해당 방식으로 구현된다. 그렇다면 쉬운 또 다른 방식은 어떤 것이 있을까? 예를 들어, 내가 어떤 가게의 종업원이 되었다고 생각해보자. 사장님께서 요리 재료를 들고 들어오시면서 냉장고에 넣으라고 박스단위로 쌓아놓으셨다. 그럴땐 어떤 박스부터 냉장고에 넣을까? 보통은 맨위의 박스부터 냉장고에 넣는다. 그럼 맨위에 쌓인 박스는 사장님께서 제일 처음 가져온 박스일까? 아니다. 가장 마지막에 가져온 박스일 것이다. 이 경우, 가장 최..
2022.07.05