BFS

Breath-First Search, 너비 우선 탐색

트리 자료구조의 순회 방법으로 같은 계층의 모든 노드를 먼저 탐색하고 다음 계층을 탐색하는 방식으로 순차적으로 진행하는 방식이다. 

https://en.wikipedia.org/wiki/Breadth-first_search

 

아직 탐색하지 않은 자식 노드를 추적하고 모든 노드를 탐색하기 위해서 일반적으로 FIFO 방식인 큐를 사용한다.

탐색을 시작할 때 먼저 루트 노드를 큐에 넣는다. 큐에서 가장 앞에 있는 노드를 먼저 탐색하고 그 자식 노드를 모두 큐에 넣는다. 그리고 큐에서 제거를 하면 가장 먼저 넣었던 노드가 빠지게 된다. 그리고 다시 큐의 가장 앞에 있는 노드를 탐색하고 자식을 큐에 넣고 가장 앞의 노드를 제거하는 과정을 큐가 빌 때까지 반복하면 최종적으로 모든 노드를 방문할 수 있게 된다.

 

 

이 방법을 확장하면 사이클 유무, 방향성, 가중치 유무 등에 상관없이 모든 형태를 포함할 수 있는 자유로운 구조로 노드와 간선으로 구성된 구조인 일반 그래프에도 적용할 수 있게 된다. 이때는 부모-자식 관계가 확실한 트리에서와는 달리 중복해서 탐색하는 것을 방지하는 작업이 추가로 필요하다.

 

시각적으로 확인하기 쉬운 이차원 그리드에서 이를 응용하면 특정 셀을 루트 노드로 간주하고 그 인접한 각 셀들을 자식 노드로 치환할 수 있다. 이때 셀들은 중복해서 인접하기 때문에 이를 체크하여 순차적으로 탐색을 이어가면 모든 셀을 중복 없이 탐색할 수 있다.

 

여기서 시작 셀 이외에 또 다른 셀을 도착 지점으로 지정하고 이 셀을 만날 때까지 탐색을 진행하고 각 셀들이 어떤 셀로부터 이어져 온 것인지에 대한 정보를 저장한다면 도착한 셀에서 이전 셀을 타고 올라가면 시작 셀에서부터 도착 셀까지 이어지는 경로를 알 수 있게 된다. 이 과정이 BFS를 응용한 길 찾기 알고리즘이다.

 

 

BFS Pathfinding

 

 

DFS

Depth-First Search, 깊이 우선 탐색

트리 자료구조의 순회 방법으로 한 방향으로 최대한 깊이 탐색한 후, 더 이상 갈 곳이 없으면 이전 노드로 돌아가서 다른 방향을 탐색하는 방식으로 진행한다.

 

https://en.wikipedia.org/wiki/Depth-first_search

 

아직 탐색하지 않은 경로를 추적하고 모든 노드를 탐색하기 위해서 일반적으로 LIFO 방식인 스택을 사용하거나 재귀 함수를 활용한다. 탐색을 시작하면 루트 노드부터 시작해서 자식이 없는 리프 노드가 나올 때까지 스택에 노드를 저장하면서 탐색을 진행한다. 리프노드에 도착하면 스택에서 제거하면서 다시 역으로 거슬러 올라가는 백트래킹 과정을 진행한다. 해당 노드에 아직 탐색하지 않은 다른 자식이 있는지 확인 후 있으면 다시 깊이 탐색을 진행하고 리프에서 다시 역으로 올라가는 작업을 스택이 빌 때까지 반복한다.

 

BFS나 DFS는 트리 구조에 따라서 다르겠지만 BFS는 같은 계층의 모든 노드를 저장하기 때문에 깊이난 얕지만 계층이 넓은 경우 메모리상 불리하고 DFS는 계층이 얇지만 트리가 깊다면 또 불리하기 때문에 구조에 따라 방법을 선택해야 한다.

 

DFS 또한 길 찾기에 적용시킬 수 있는데 BFS는 가장 인접한 노드를 탐색하기 때문에 자연스럽게 최단 경로를 찾게 되는 것과 달리 DFS의 경우에는 최단 경로는 보장하지 않지만 경로 존재 여부나 모든 경로 탐색 등의 경우에 유리하다.

 

DFS Pathfinding

728x90
반응형

'Computer' 카테고리의 다른 글

A* Algorithm  (1) 2025.05.30
Dijkstra algorithm  (0) 2025.05.30
Pathfinding Visualizer - 탐색 알고리즘 시각화 툴  (0) 2025.05.29

탐색 알고리즘을 시각화하기 위한 웹 페이지

 

https://bakcoding.github.io/pathfinding-algorithm/index.html

 

Pathfinding Visualizer

 

bakcoding.github.io

728x90
반응형

'Computer' 카테고리의 다른 글

A* Algorithm  (1) 2025.05.30
Dijkstra algorithm  (0) 2025.05.30
탐색 알고리즘 - BFS/DFS  (0) 2025.05.29

Flutter SDK 설치

먼저 Flutter를 설치하는 방법은 크게 두 가지가 있다.

 

첫 번째는 공식 홈페이지에 들어가서 직접 파일을 다운로드하여 압축을 풀고 환경변수 설정을 하는 것이다.

 

두 번째로는 Visual Studio Code를 활용해서 여기서 Flutter를 설치하는 방법이 있다.

 

해당 내용은 플러터 공식 홈페이지에서도 확인 가능하다.

 

첫 번째 방법

먼저 공식 홈페이지에서 SDK 압축 파일을 다운로드한 다음 적절한 경로에 옮겨두고 압축을 푼다.

이 경로에는 특수 문자나 공백을 포함해선 안되며 또한 권한이 필요한 폴더 내에 위치해서도 안된다.

 

저장한 위치의 경로를 복사해 둔 다음 이 경로 사용자 변수 또는 시스템 변수의 PATH에 등록한다.

Flutter - Env var

 

두 번째 방법

VSCode를 열고 확장 프로그램 마켓을 열고 flutter를 검색해서 가장 상단에 있는 걸 설치한다.

Flutter - VSCode market place

 

프로젝트 생성

플러터 SDK의 설치가 끝났다면 VSCode를 열고 팔레트를 열어서(Ctrl + Shift + P) 새로운 플러터 프로젝트를 생성한다.

 

Flutter - New Project

 

New Project를 선택하면 > 프로젝트 템플릿 > 프로젝트 생성 경로 > 프로젝트 이름

 

프로젝트 템플릿

프로젝트 템플릿은 Application, Empty, Skeleton이 있다.

 

Application은 기본적인 UI 구성 요소가 만들어져 있어 처음에 Flutter의 계층 구조나 State 개념을 파악하는데 괜찮을 듯하다.

 

Empty는 뜻 그대로 기본 main 함수와 MaterailApp()만 작성되어 있는 실행가능한 최소 상태이다.

 

Skeleton은 기본 페이지 구성과 라우팅 구조를 갖춘 템플릿으로 어느 정도 숙련도가 있다면 빠른 작업 진행에 유용할 것 같다.

 

생성 경로

해당 경로에 '프로젝트 이름' 폴더가 생성되고 IDE에서 해당 폴더를 연다. 이름은 경로 설정 후 입력가능하며 기본 이름값이 주어진다.

 

프로젝트 이름

프로젝트 폴더 이름뿐만 아니라 앱의 이름인 pubspec.yml 파일의 name 필드의 값도 해당 이름으로 설정된다. 

 

추가 패키지 설치

Flutter 프로젝트의 생성이 끝났다면 먼저 IDE에서 터미널을 열고, flutter doctor 명령어를 실행시켜 문제가 없는지 확인한다.

 

해당 명령어의 실행이 끝나면 체크 항목과 문제 사항을 볼 수 있는데 여기서 문제가 되는 부분들을 하나씩 해결해 주도록 한다.

 

이미 한 번 작업을 마친 상태였기 때문에 현재는 문제가 발생하지 않지만 일반적으로 색칠한 부분에서 문제가 발생할 것이다.

 

Flutter Doctor

 

Android Studio - 안드로이드 스튜디오가 없다면 요구되는 버전을 확인 후 설치한다.

Android toolchain - 안드로이드 스튜디오의 SDK 매니저에서 Android toolchain을 찾아서 설치한다.

Visual Studio - VS를 버전에 맞게 설치하고 추가 설치 항목에서 develop Windows apps를 설치한다.

 

문제가 모두 해결되었는지 다시 flutter doctor를 실행해서 확인한다.

 

여기까지 완료되었다면 기본적인 준비가 완료되었다.

 

다시 팔레트를 열어서 Flutter: Launch Emulator를 클릭해서 가상 머신을 실행시킨 후 터미널에서 flutter run을 실행시켜 앱을 띄워본다.

 

IDE의 이 버튼을 눌러도 실행을 시킬 수 있다.

Flutter - Run

 

Flutter - Run with vm

 

애뮬레이터를 추가하려면 안드로이드 스튜디오의 디바이스 매니저에서 추가하면 된다.

728x90
반응형

+ Recent posts