Baekjoon/DFS와 BFS
[백준] 2667 단지번호붙이기 (실버1) / DFS
hellosonic
2023. 4. 17. 13:30
문제요약
나의 코드 및 설명
- dfs을 통해 지도에서 붙어있는 집(1)의 개수를 카운트할 수 있다.
- 이 때, 집의 개수를 카운트할 때마다 해당 좌표에 해당하는 집을 없애면서(0) 카운트한다.
- dfs을 만들었으면, 메인함수에서 지도의 좌표 값이 1인 곳에서 dfs를 호출한다.
def dfs(x,y):
global count
board[y][x] = 0
count += 1 #호출 되었을 때 카운트
for i in range(4):
nx = x+dx[i]
ny = y+dy[i]
if nx<0 or ny<0 or nx>=n or ny>=n:
continue
else:
#호출 가능한 조건
if board[ny][nx] == 1 and visited[ny][nx] == 0:
dfs(nx, ny)
n = int(input())
board = []
for _ in range(n):
board.append(list(map(int, str(input()))))
visited = [[0]*n for _ in range(n)]
count = 0
ans = []
dx = [0,1,0,-1]
dy = [1,0,-1,0]
for j in range(n):
for i in range(n):
if board[j][i] == 1:
dfs(i,j)
ans.append(count)
count = 0
ans.sort()
print(len(ans))
for i in ans:
print(i)
피드백
본래에는 for문 안에서 하위 함수를 호출하기 전에 카운트를 해주었다. 이렇게 했는데도 예제 출력값은 제대로 나왔으나 이상하게 틀렸다는 판정을 받았다.. 풀이를 참고하여 dfs가 호출되고 나서 카운트를 해주도록 코드를 수정하였더니 정답 판정을 받을 수 있었다.