N x N 지도에서 두 섬을 연결하는 최단 다리 길이 계산: BFS 활용 문제 해결 전략
🤖 AI 추천
이 콘텐츠는 그리디 알고리즘 및 BFS(너비 우선 탐색) 알고리즘을 활용하여 최단 경로 문제를 해결하는 방법을 다룹니다. 알고리즘 문제 해결 능력을 향상시키고자 하는 개발자, 특히 코딩 테스트를 준비하는 분들에게 유용합니다. 그래프 탐색 및 최단 거리 알고리즘에 대한 이해를 넓히고 싶은 미들 레벨 이상의 개발자에게 추천합니다.
🔖 주요 키워드

핵심 기술
이 콘텐츠는 N x N 그리드 상에서 여러 섬으로 이루어진 지도에서, 두 섬을 연결하는 가장 짧은 다리의 길이를 계산하는 알고리즘 문제 해결 방법을 BFS(너비 우선 탐색)를 중심으로 설명합니다. 섬 라벨링, 경계 탐색, 그리고 여러 섬으로부터의 동시적인 BFS 확장을 통해 최단 거리를 찾는 과정에 집중합니다.
기술적 세부사항
- 문제 정의: N x N 지도에서 바다(0)와 육지(1)로 구성된 환경에서, 서로 다른 두 섬을 연결하는 최단 다리 길이(격자 칸 수)를 찾는 문제입니다.
- 섬 라벨링 (BFS):
- 지도 내의 육지(1)를 대상으로 BFS를 수행하여 각 섬에 고유한 ID(2부터 시작)를 부여합니다.
- BFS 탐색 중 육지에서 바다(0)와 인접한 칸을 '경계 좌표'로 식별하여 기록합니다.
assignIslandId
함수에서 각 섬의 고유 ID 할당 및 경계 좌표 수집을 담당합니다.- 시간 복잡도: O(N²)
- 최단 다리 길이 계산 (BFS):
findShortestBridge
함수에서 모든 섬의 경계 좌표들을 큐에 초기화합니다.owner[][]
배열을 통해 각 칸이 어느 섬에서 확장되었는지 추적하고,dist[][]
배열로 해당 섬으로부터의 거리를 기록합니다.- 큐에 담긴 경계 좌표들로부터 동시에 BFS를 확장하며, 다른 섬의
owner
를 만나는 지점에서 두 섬으로부터 확장된 거리의 합으로 다리 길이를 계산합니다. minBridge
변수를 사용하여 발견된 모든 다리 길이 중 최소값을 갱신합니다.- 시간 복잡도: O(N²)
- 전체 시간 복잡도: O(N²) (섬 라벨링 O(N²) + 최단 다리 계산 O(N²))
- 구현 언어: Java
개발 임팩트
- 그래프 탐색 알고리즘(BFS)의 응용력을 높일 수 있습니다.
- 최단 경로 문제 해결 능력을 배양하고, 코딩 테스트 및 알고리즘 경진대회에서의 문제 해결 능력을 향상시킬 수 있습니다.
- 복잡한 그리드 기반 문제를 체계적으로 분석하고 해결하는 방법을 습득할 수 있습니다.
커뮤니티 반응
(원문에 커뮤니티 반응에 대한 직접적인 언급은 없습니다.)
톤앤매너
해설자의 친절한 설명과 함께, 알고리즘의 각 단계별 로직, 시간 복잡도 분석, 그리고 Java 코드 예시를 제공하여 개발자에게 실질적인 학습 경험을 제공합니다.
📚 관련 자료
LeetCode
이 문제는 LeetCode의 'Shortest Bridge' 문제와 직접적으로 관련이 있습니다. LeetCode는 다양한 알고리즘 문제와 솔루션을 제공하며, 이 저장소는 이러한 문제들을 해결하는 데 필요한 알고리즘적 사고방식과 코드 구현 방식을 탐구하는 데 도움이 됩니다.
관련도: 95%
Algorithms
Java로 구현된 다양한 알고리즘 라이브러리를 제공하는 저장소입니다. BFS와 같은 그래프 탐색 알고리즘의 기본적인 구현을 참고하거나, 다양한 최단 경로 알고리즘의 예시를 확인하는 데 유용합니다.
관련도: 85%
Competitive Programming Solutions
이 저장소는 코딩 테스트 및 알고리즘 경진대회에 자주 출제되는 문제들의 해결책을 포함하고 있습니다. BFS를 활용한 그리드 탐색 문제는 코딩 테스트의 단골 주제이므로, 관련 문제 해결 전략과 코드 패턴을 파악하는 데 참고할 수 있습니다.
관련도: 80%