본문 바로가기

자료구조&알고리즘/DFS BFS18

[백준] bfs - 3055번 탈출 (Java) 문제링크 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제 www.acmicpc.net 접근한 방법 두 개의 노드 간의 거리를 구하는 문제이므로, bfs로 접근해보았다. 풀이방법 BFS는 시작 지점에서 가까운 노드부터 차례대로 그래프의 모든 노드를 탐색하기 때문에, 이 문제는 BFS를 이용했을 때 효과적이다. 물이 번지는 것도 고려해야하므로, 물의 시작지점부터 BFS를 수행한다. 물이 번지는 동작이 수행되었으면 그 이후로 시작지점(고슴도치가 있는 좌표)에서부터 BFS를 수행하여 모든 노드의 값을 거리 정보로 넣는다. 특정한 노드를 방문하면 그 이전 노.. 2021. 8. 11.
[백준] bfs - 5427번 불 (Java) 문제링크 5427번: 불 상근이는 빈 공간과 벽으로 이루어진 건물에 갇혀있다. 건물의 일부에는 불이 났고, 상근이는 출구를 향해 뛰고 있다. 매 초마다, 불은 동서남북 방향으로 인접한 빈 공간으로 퍼져나간다. 벽에 www.acmicpc.net 접근한 방법 두 개의 노드 간의 거리를 구하는 문제이므로, bfs로 접근해보았다. 풀이방법 BFS는 시작 지점에서 가까운 노드부터 차례대로 그래프의 모든 노드를 탐색하기 때문에, 이 문제는 BFS를 이용했을 때 효과적이다. 불이 번지는 것도 고려해야하므로, 불의 시작지점부터 BFS를 수행한다. 불이 번지는 동작이 수행되었으면 그 이후로 시작지점(상범이가 있는 좌표)에서부터 BFS를 수행하여 모든 노드의 값을 거리 정보로 넣는다. 특정한 노드를 방문하면 그 이전 노드.. 2021. 8. 4.
[백준] bfs- 6593번 상범빌딩 (Java) 문제링크 6593번: 상범 빌딩 당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어 www.acmicpc.net 접근한 방법 두 개의 노드 간의 거리를 구하는 문제이므로, bfs로 접근해보았다. 증명/ 풀이방법 BFS는 시작 지점에서 가까운 노드부터 차례대로 그래프의 모든 노드를 탐색하기 때문에, 이 문제는 BFS를 이용했을 때 효과적이다. 시작지점(S가 있는 좌표)에서부터 BFS를 수행하여 모든 노드의 값을 거리 정보로 넣는다. 특정한 노드를 방문하면 그 이전 노드의 거리에 1을 더한 값을 배열에 넣는다. 소스코드 작성 방법 이 문제는 흔히 푸는 2차원 배열 문제에 .. 2021. 7. 28.
[백준] bfs - 2178번 미로탐색 (Java) 문제링크 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 접근한 방법 두 개의 노드 간의 거리를 구하는 문제이므로, bfs로 접근해보았다. 풀이방법 BFS는 시작 지점에서 가까운 노드부터 차례대로 그래프의 모든 노드를 탐색하기 때문에, 이 문제는 BFS를 이용했을 때 효과적이다. 시작지점(0,0)에서부터 BFS를 수행하여 모든 노드의 값을 거리 정보로 넣는다. 특정한 노드를 방문하면 그 이전 노드의 거리에 1을 더한 값을 배열에 넣는다. 소스코드 작성 방법 미로의 크기(n, m)을 전역 필드로 선언한다. 미로의 정보(maze), 방문 여부 .. 2021. 7. 26.
[백준] dfs/bfs - 1260번 DFS와 BFS(Java) 문제링크 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 접근한 방법 문제에 대놓고 DFS와 BFS로 적혀있으므로 각 알고리즘으로 구현 풀이방법 dfs 1. dfs 메소드를 선언하여 파라미터를 정점 번호로 받는다. 2. 현재 정점을 방문 처리하고, 3. 그 정점과 연결되어 있으며 방문하지 않은 정점을 방문한다 (dfs 메소드를 호출한다). bfs 1. 탐색 시작 정점을 큐에 삽입하고 방문 처리를 한다. 2. 큐에서 정점을 꺼내 해당 정점의 인접 정점 중에서 방문하지 않은 .. 2021. 6. 30.
[백준] dfs - 2648번 안전영역 (Java) 문제링크 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 접근한 방법 구역을 구하는 문제이므로 dfs 풀이방법 비의 양보다 큰 값이 상, 좌, 하, 우로 연결되어 있는 범위를 묶어 그 안의 있는 요소의 수를 세면된다. 1. 특정한 지점의 주변 상, 좌, 하, 우를 살펴본 뒤에 주변 지점 중에서 값이 비의 양보다 크면서 아직 방문하지 않은 지점이 있다면 해당 지점을 방문한다. 2. 방문한 지점 에서 다시 상, 좌, 하, 우를 살펴보면서 방문을 다시 진행하면, 연결된 모든 지점을 방문할 수 있다. 방문시마다 요소의 수를.. 2021. 6. 14.
[백준] dfs - 10026번 적록색약 (Java) 문제링크 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 접근한 방법 구역을 구하는 문제이므로 dfs 풀이방법 두 가지 경우를 나누어 탐색을 수행한다. 1) 적록색약이 아닌 경우 : R, G, B 구역 2) 적록색약인 경우 : R 또는 G, B 구역 1. 특정한 지점의 주변 상, 좌, 하, 우를 살펴본 뒤에 주변 지점 중에서 탐색하는 지점의 문자가 R, G, B중 적록색약일 경우와 아닌 경우에 따라 (아래 참조) 아직 방문하지 않은 지점이 있다면 해당 지점을 방문한다. - 적록색약이 아닌 사람일 경우 현.. 2021. 5. 23.
[백준] dfs - 2583번 영역 구하기 (Java) 문제링크 2583번: 영역 구하기 첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오 www.acmicpc.net 접근한 방법 연결 요소의 개수를 구하는 문제이므로 dfs 풀이방법 1인 값이 상, 좌, 하, 우로 연결되어 있는 범위를 묶어 그 안의 있는 요소의 수를 세면된다. 1. 특정한 지점의 주변 상, 좌, 하, 우를 살펴본 뒤에 주변 지점 중에서 값이 1이면서 아직 방문하지 않은 지점이 있다면 해당 지점을 방문한다. 2. 방문한 지점 에서 다시 상, 좌, 하, 우를 살펴보면서 방문을 다시 진행하면, 연결된 모든 지점을 방문할 수 있다. 방문.. 2021. 5. 23.
[백준] dfs - 2667번 단지번호붙이기 (Java) 문제링크 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 접근한 방법 연결되어있는 노드의 개수를 구하는 문제이므로 dfs 풀이방법 1인 값이 상, 좌, 하, 우로 연결되어 있는 범위를 묶어 그 안의 있는 요소의 수를 세면된다. 1. 특정한 지점의 주변 상, 좌, 하, 우를 살펴본 뒤에 주변 지점 중에서 값이 1이면서 아직 방문하지 않은 지점이 있다면 해당 지점을 방문한다. 2. 방문한 지점 에서 다시 상, 좌, 하, 우를 살펴보면서 방문을 다시 진행하면, 연결된 모든 지점을 방문할 수 있다. 방문시마다 요소의 .. 2021. 5. 22.
[백준] dfs - 1743번 음식물 피하기 (Java) 문제링크 1743번: 음식물 피하기 첫째 줄에 통로의 세로 길이 N(1 ≤ N ≤ 100)과 가로 길이 M(1 ≤ M ≤ 100) 그리고 음식물 쓰레기의 개수 K(1 ≤ K ≤ 10,000)이 주어진다. 그리고 다음 K개의 줄에 음식물이 떨어진 좌표 (r, c)가 주어진 www.acmicpc.net 접근한 방법 연결된 노드의 묶음이 포인트인 문제이므로, dfs 풀이방법 1인 값이 상, 좌, 하, 우로 연결되어 있는 범위를 묶어 그 안의 있는 요소의 수를 세면된다. 1. 특정한 지점의 주변 상, 좌, 하, 우를 살펴본 뒤에 주변 지점 중에서 값이 1이면서 아직 방문하지 않은 지점이 있다면 해당 지점을 방문한다. 2. 방문한 지점 에서 다시 상, 좌, 하, 우를 살펴보면서 방문을 다시 진행하면, 연결된 모든.. 2021. 5. 21.
[백준] dfs - 11724번 연결 요소의 개수 (Java) 문제링크 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주 www.acmicpc.net 접근한 방법 dfs 풀이방법 2021.05.04 - [알고리즘/DFS BFS] - DFS에 있는 DFS 예제 중 인접행렬을 참고하였다. dfs 메소드를 선언하여 파라미터를 노드 번호로 받는다. 현재 노드를 방문 처리하고, 그 노드와 연결되어 있으며 방문하지 않은 노드를 방문한다 (dfs 메소드를 호출한다). 해당 노드의 dfs 메소드 호출이 끝나면 결과를 더해줌으로 써 연결 노드의 개수를 구한.. 2021. 5. 21.
[백준] DFS - 9466번 텀 프로젝트 (Java) 문제링크 9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 www.acmicpc.net 접근한 방법 dfs 풀이방법 참고한 블로그 dfs문제를 풀 때 boolean 자료형으로 방문여부(visited 배열)만 체크했는데, 이 문제는 그 노드의 깊이의 탐색이 끝났는지(finished 배열)도 체크를 해야했다. dfs 메소드를 선언하여 파라미터를 노드번호로 받는다. 현재 노드를 방문 처리하고, 그 노드에 이어져있는 다음 번호 방문 여부를 체크한 후, 방문을 진행한다. 일단 탐색이 끝난 여부 처리하는 걸 무시하고 생각했을 때 노드와 이어져있는 모든 노.. 2021. 5. 19.
반응형