해결된 질문
21.10.03 12:36 작성
·
189
1
- 안녕하세요 선생님
강의 잘 듣고 있습니다^-^
덕분에 코테는 벌벌 떨던 제가 BFS랑 DFS에 대해서 이런거였어? 싶을 정도로 쉽게 이해하고 있는 중입니다
감사합니다 ㅎㅎ
다름이 아니라 9:03 초에서 res를 while문 안에 작성하셨는데요
그렇게 되면 큐에 들어온 녀석 갯수만큼 추가 되면서
선생님이 뒤에 말씀하신 것처럼 최초 진입 시점의 갯수도
포함하게 되어서 최초 진입시점에도
grid[x][y] = 0 값을 넣게 되는데요
애초에 들어오고 나서 for문 내의 if문에서 방문했다(visited)라고 하는 조건 내에서 면적을 추가 시켜 주면
그러한 작업이 필요 없을 거 같아서요
아래 예시인데요..
일단 값은 잘 나오는 지 테스트 해봤는데
이 부분은 어떻게 생각하시는지 궁금합니닷
(혹시 틀렸다면 알려주세요 ㅠㅜ..)
private int bfs(int[][] grid, int x, int y) {
Queue<int[]> queue = new LinkedList<>();
queue.offer(new int[] {x, y}); //0, 0
int area = 0;
while (!queue.isEmpty()) {
int[] point = queue.poll();
for (int[] dir : dirs) {
int findX = point[0] + dir[0];
int findY = point[1] + dir[1];
if (findX >= 0 && findY >= 0 && findX < m && findY < n
&& grid[findX][findY] == 1) {
grid[findX][findY] = 0;
queue.offer(new int[] {findX, findY});
area++;
}
}
}
return area;
}
답변 1
1
2021. 10. 04. 16:49
네 맞습니다. 좋은 의견 주셔서 감사합니다.
area++를 아래 적어주신것처럼 에러 체크 조건안에 넣어두면 더 확실합니다.
실제 코딩시험에서는 변형해서 문제를 내죠. devJR 처럼 확실히 생각한것을 코딩하는게 정답이죠
요새 코딩시험은 외워서 하는게 거의 불가능하고 조금씩 변경하기 때문에 코딩할때 항상
기준을 잡고 코딩하시면 되겠씁니다
감사합니다~~
if (findX >= 0 && findY >= 0 && findX < m && findY < n
&& grid[findX][findY] == 1) {
grid[findX][findY] = 0;
queue.offer(new int[] {findX, findY});
area++;
}