티스토리 뷰

PS

백준 17472. 다리 만들기 2

tose33 2022. 5. 21. 16:13

https://www.acmicpc.net/problem/17472

 

17472번: 다리 만들기 2

첫째 줄에 지도의 세로 크기 N과 가로 크기 M이 주어진다. 둘째 줄부터 N개의 줄에 지도의 정보가 주어진다. 각 줄은 M개의 수로 이루어져 있으며, 수는 0 또는 1이다. 0은 바다, 1은 땅을 의미한다.

www.acmicpc.net

 

MST 만들기, 크루스칼 알고리즘:

https://tose33.tistory.com/485

 

최소 신장 트리(MST), 크루스칼 알고리즘 (kruskal)

학교에서 배웠었는데 알고리즘 문제에 필요해서 다시 한번 정리. Union-Find 알고리즘 : (https://tose33.tistory.com/614) - 크루스칼 알고리즘 최소의 비용으로 모든 노드를 연결하는 알고리즘 - 신장 트리

tose33.tistory.com

 

답을 찾는 방식은 각 섬들 사이의 최단 경로들을 구해놓고, 크루스칼 알고리즘으로 MST를 만드는 것이다. 

 

그러기 위해서는 우선 각 섬들에 고유의 번호를 부여해야 하는데, 이는 bfs로 각 섬들에게 각각의 번호를 부여했다.

 

이제 각 섬들에게는 번호가 생겼다.

그럼 이후에는 섬들 사이의 최단 경로를 구해야 하는데, 하나의 섬마다 그 섬의 모든 칸에 대하여 동서남북으로 한 방향으로 이동하면서 다른 섬을 만나면 시작 섬, 도착 섬, 경로를 기억한다.

이런식으로 모든 섬에 대하여 다른 섬들과의 최단 경로를 구한다.

 

이제 모든 섬들 사이의 최단경로를 구했으니, 크루스칼 알고리즘으로 최소 스패닝 트리를 만들수 있는지 시도해 보면된다. 

크루스칼 알고리즘 종료 후 최소 스패닝 트리가 만들어졌는지 (모든 노드가 서로 이어졌는지) 확인하는 방법은,

두 노드를 연결한 횟수, 즉 Union 연산의 횟수가 모든 노드들의 갯수보다 한개 작은지 확인한다. 

모든 노드들이 서로 연결되어 있다면 그 사의 경로는 노드의 갯수보다 1개 적을것이다. 

Union 연산 횟수 + 1 = 노드의 총 갯수 라면 MST가 성공적으로 만들어진 것이고, 

아니라면 이어지지 못한 노드가 존재하는 것이다. 

 

 

 

 


2023.08.05

 

'PS' 카테고리의 다른 글

백준 14719. 빗물  (0) 2022.05.21
백준 2665. 미로 만들기  (0) 2022.05.21
백준 13460. 구슬 탈출 2  (0) 2022.05.19
백준 20055. 컨베이어 벨트 위의 로봇  (0) 2022.05.19
백준 1238. 파티  (0) 2022.05.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함