본문 바로가기

알고리즘

(5)
[Java, Python] SWEA 1226번 미로1 문제 아래 그림과 같은 미로가 있다. 16*16 행렬의 형태로 만들어진 미로에서 흰색 바탕은 길, 노란색 바탕은 벽을 나타낸다. 가장 좌상단에 있는 칸을 (0, 0)의 기준으로 하여, 가로방향을 x 방향, 세로방향을 y 방향이라고 할 때, 미로의 시작점은 (1, 1)이고 도착점은 (13, 13)이다. 주어진 미로의 출발점으로부터 도착지점까지 갈 수 있는 길이 있는지 판단하는 프로그램을 작성하라. 아래의 예시에서는 도달 가능하다. 아래의 예시에서는 출발점이 (1, 1)이고, 도착점이 (11, 11)이며 도달이 불가능하다. [입력] 각 테스트 케이스의 첫 번째 줄에는 테스트 케이스의 번호가 주어지며, 바로 다음 줄에 테스트 케이스가 주어진다. 총 10개의 테스트케이스가 주어진다. 테스트 케이스에서 1은 벽을..
[ALGORITHM] 트리 트리 자료구조 트리는 그래프의 일종으로 최소 연결 트리라고도 불린다. 트리의 구조 및 용어 노드 (Node) 트리를 구성하고 있는 기본 요소 노드에는 키 또는 값과 하위 노드에 대한 포인터를 가지고 있음. A, B, C, D, E, F, G, H, I, J 간선 (Edge) 노드와 노드 간의 연결선 루트 노드 (Root Node) 트리 구조에서 부모가 없는 최상위 노드 root node : A 부모 노드 (Parent Node) 자식 노드를 가진 노드 H, I에 부모 노드는 D 자식 노드 (Child node) 부모 노드의 하위 노드 노드 D의 자식 노드는 H, I 형제 노드 (Sibling node) 같은 부모를 가지는 노드 H, I는 같은 부모를 가지는 형제 노드 외부 노드(external node,..
[ALGORITHM] 그래프 탐색(DFS, BFS) 그래프 그래프 자료구조는 각 노드들 간의 관계를 표현하는 그래프로 지금까지 배웠던 리스트, 스택, 큐 등 선형구조가 아닌 비선형 구조이다. 그래프의 구조 그래프는 여러 특성을 가지는 vertex(정점)과 정점들간의 관계를 의미하는 edge(간선)으로 이루어져 있다. 그래프의 종류 무방향 그래프(undirected graph) : 간선에 방향이 없다. 즉 양방향 방향 그래프(directed graph) : 간선에 방향이 있다. 즉 단방향 가중치 그래프: 거리나 비용등으로 표현될수 있는 가중치가 간선에 포함되어 있다. 그래프 탐색 방법 DFS(깊이 우선 탐색) : Depth-First Search의 약자로 인접한 노드를 따라 탐색하고 더이상 자식 노드가 존재하지 않으면 다음 자식 노드가 존재하는 곳부터 탐색..
[ALGORITHM] 연결리스트, 스택, 큐, 해시 테이블 연결리스트(Linked List) 연결리스트는 인덱스를 통해 빠른 접근은 가능하지만 크기가 불변인 배열의 단점을 보완하기 위해 생긴 자료구조이다. 기본적으로 파이썬은 리스트가 이 연결리스트의 기능들을 지원한다. Node : 데이터와 다음 데이터를 가리키는 주소(포인터)로 이루어져 있다. Pointer : 각 노드에서 다음 데이터를 가리키는 주소값을 가지고 있다. Head : 연결리스트에서 가장 시작점인 데이터를 의미한다. Tail : 연결리스트에서 가장 마지막 데이터를 의미한다. Next = None(Null) : 다음 데이터가 없을 경우 포인터의 주소값은 None(Null)이다. 연결리스트는 필요한 데이터를 찾을때 시작점(head)부터 pointer를 따라 해당 데이터를 찾기 때문에 O(n)의 시간 복..
[ALGORITHM] 최단경로(다익스트라, 플로이드와샬) 최단경로 노드간 이동할 때 가중치가 1인 경우에는 BFS(너비 우선 탐색)를 이용해 쉽게 최단거리를 구할 수 있었습니다. 그렇다면 가중치가 1이 아닌 경우에는 어떻게 풀어야 할까요? 이때는 BFS가 아닌 Dijkstra(다익스트라)와 Floyd-warshall(플로이드-와샬) 탐색 기법을 이용해 문제를 풀 수 있습니다. 가중치가 음수일 경우 이용할 수 있는 Bellman Ford(벨만 포드) 기법도 있지만 이 글에서는 우선 다익스트라와 플로이드-와샬에 대해서만 배워 보겠습니다. 다익스트라(Dijkstra) 다익스트라 알고리즘은 에츠허르 다익스트라가 고안한 알고리즘으로 특정한 하나의 정점에서 다른 모든 정점으로 가는 최단거리를 구해주는 알고리즘입니다. 다익스트라의 기본 개념은 출발 지점에서 부터 방문하지 ..