강의

멘토링

커뮤니티

Inflearn Community Q&A

devjr's profile image
devjr

asked

Concepts and problems you must know before coding test (with Java)

BFS maximum area of the island

면적을 구하는 res를 for문 내에 있는 if문 안에 넣으면 되지 않나요?

Resolved

Written on

·

294

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;
    }
java코테 준비 같이 해요!

Answer 1

1

pushupman님의 프로필 이미지
pushupman
Instructor

devJR 안녕하세요~~!!

 

네 맞습니다. 좋은 의견 주셔서 감사합니다.

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++;
                }

 

devjr's profile image
devjr

asked

Ask a question