알고리즘 연습/DFS와 BFS
[Lv.2 / 프로그래머스 / 파이썬] 무인도 여행
김세진
2025. 5. 30. 17:02
반응형
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
연결된 땅들의 크기를 계산하여 각 섬의 크기를 오름차순으로 출력하는 문제이다.
DFS 및 BFS를 사용하여 해결할 수 있다.
작성된 코드의 알고리즘 순서는 다음과 같다.
- 맵을 탐색하며 X가 아닌 부분(섬의 일부)을 찾는다.
- 섬의 일부를 발견한 경우, BFS로 섬 전체를 탐색한다.
- 섬을 방문한 좌표의 경우 X로 표시로 체크하여 재방문을 막는다.
- 섬 탐색이 끝나면 현재 섬의 크기를 저장한 다음, 맵을 이어서 탐색하며 다른 섬들을 찾는다.
- 맵 탐색이 전부 끝나면, 저장된 섬의 크기를 오름차순 정렬한 다음 반환한다.
def solution(maps):
board = [list(m) for m in maps]
move = [(0, 1), (1, 0), (0, -1), (-1, 0)]
N, M = len(board), len(board[0])
res = []
# 맵 탐색
for i in range(N):
for j in range(M):
if board[i][j] == 'X':
continue
# 섬의 일부를 발견했으므로 섬 탐색
q = [(i, j)]
size = 0
while q:
x, y = q.pop()
# 방문 체크
if board[x][y] == 'X':
continue
size += int(board[x][y])
board[x][y] = 'X'
# 4방향 탐색
for a, b in move:
dx, dy = x+a, y+b
if dx < 0 or dx >= N or dy < 0 or dy >= M or board[dx][dy] == 'X':
continue
q.append((dx, dy))
else:
res.append(size)
return sorted(res) if res else [-1]
반응형