반응형
Programmers Lv.2 '무인도 여행' 파이썬
영역 탐색 -> BFS
조건파악
1. 영역 탐색
2. 탐색하면서 수를 누산해야 함
접근
recursive BFS를 이용.
의사코드
bfs()를 선언
bfs()는 재귀적으로 호출되며, 특정 지점에서 네 방향을 탐색하고 방문처리
유효한 탐색 방향에 대해 다시 bfs() 수행 후 결과들을 합산
bfs를 시작한 지점에서의 결과와 다시 합산하여 return
방문하지 않은 지점을 우선으로 전부 탐색하여 결과를 리스트에 저장
리스트를 정렬. 리스트가 비어있으면 [-1]
구현
import sys
sys.setrecursionlimit(10**6)
def solution(maps):
answer = []
rows = len(maps)
cols = len(maps[0])
dr = [-1, 0, 1, 0]
dc = [0, 1, 0, -1]
vis = [[False for _ in range(cols)] for _ in range(rows)]
#recursive bfs
def bfs(r,c) :
vis[r][c] = True
area = 0
for i in range(4) :
r1,c1 = r + dr[i], c + dc[i]
if 0 <= r1 < rows and 0 <= c1 < cols and maps[r1][c1] != 'X' and not vis[r1][c1] :
area += bfs(r1,c1)
return int(maps[r][c]) + area
#start search
for i in range(rows) :
for j in range(cols) :
if vis[i][j] == False and maps[i][j] != 'X':
answer.append(bfs(i,j))
#validate answer
if answer :
answer.sort()
else :
answer = [-1]
return sorted(answer)
반응형
'Software Engineering' 카테고리의 다른 글
[Python 문제풀이] 프로그래머스 '파괴되지 않은 건물' (0) | 2023.06.12 |
---|---|
[Python 문제 풀이] 프로그래머스 '두 원 사이의 정수 쌍' (0) | 2023.05.04 |
[Python 문제 풀이] 프로그래머스 '당구 연습' (0) | 2023.05.02 |
[Python 문제 풀이] 프로그래머스 '연속된 부분 수열의 합' (0) | 2023.04.27 |
Maven 프로젝트 JDK 런타임 버전 설정하기 (0) | 2023.04.22 |