문제요약
나의 코드 및 설명
- DFS로는 런타임 에러가 발생하여 BFS로 풀었다.
from collections import deque
def bfs(x,y):
global size
queue = deque()
queue.append((x,y))
size = 1
visited[y][x] = 1 #현재 좌표 방문처리
board[y][x] = 0 #방문한 현재 좌표에 0 저장
while queue:
x,y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx<0 or ny<0 or nx>=m or ny>=n:
continue
else:
if board[ny][nx] == 1 and visited[ny][nx] == 0:
visited[ny][nx] = 1
board[ny][nx] = 0
size += 1
queue.append((nx,ny))
n, m = map(int, input().split()) #세로n 가로m
board = []
for _ in range(n):
board.append(list(map(int, input().split())))
dx = [0,1,0,-1]
dy = [1,0,-1,0]
visited = [[0] * m for _ in range(n)]
size = 0
max_size = 0
count = 0
for i in range(n):
for j in range(m):
if board[i][j] == 1:
bfs(j, i)
if max_size < size:
max_size = size
size = 0
count += 1
print(count,max_size,sep="\n")
피드백
처음엔 나에게 더 익숙한 DFS로 풀어보려고 했으나 예제입력에 대한 출력값은 정상적으로 나왔지만 런타임 에러가 발생했다. 이럴 경우 BFS로 풀면 된다는 것을 몸소 체험할 수 있었다. DFS, BFS의 시간 복잡도는 모든 노드를 탐색한다는 점에서 동일하지만 BFS가 재귀함수로 구현하는 DFS보다 조금 더 빠르다고 한다.
BFS로 다시 도전해서 맞을 수 있었는데 며칠 뒤 다시 풀어보려고 하니까 런타임 에러가 발생했다. 맞는 것 같은데 왜 에러가 발생하지.. 고민하다가 결국 원인을 찾아냈는데, BFS를 실행한 후의 값을 리스트에 저장해서 사용하려고 하니까 런타임 에러(ValueError)가 발생했다..(머지...) 변수에 저장하니까 정답 판정을 받을 수 있었따. >> 에러의 원인이 이게 아니었다. 문제를 보면 그림이 하나도 없는 경우에는 가장 넓은 그림의 넓이는 0 이라고 하였다. 즉, 그림이 하나도 없는 경우에는 ans_list = []이게 되고, 빈 리스트에서 max 메서드를 사용하다 보니 런타임 에러(ValueError)가 발생하는 것이다. ans_list가 비어있는 경우(그림이 하나도 없는 경우) 0이 출력될 수 있도록 조건문을 작성하여 제출해보았더니 정답 판정을 받을 수 있었다.
'Baekjoon > DFS와 BFS' 카테고리의 다른 글
[백준] 1697 숨바꼭질 (실버1) / BFS (0) | 2023.04.21 |
---|---|
[백준] 1012 유기농 배추 (실버2) / BFS (방문체크 위치 정확히!) (0) | 2023.04.21 |
[백준] 2667 단지번호붙이기 (실버1) / DFS (0) | 2023.04.17 |
[백준] 2178 미로 탐색 (실버1) / BFS (0) | 2023.04.17 |
[백준] 1260 DFS와 BFS (실버2) (0) | 2023.04.17 |