인프런 커뮤니티 질문&답변

재영님의 프로필 이미지
재영

작성한 질문수

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

12. 토마토(BFS)

코드의 이 부분을 다르게 풀었는데, 괜찮은지 질문드립니다!

해결된 질문

작성

·

285

·

수정됨

0

    private static void bfs() {
        while (!queue.isEmpty()) {
            int size = queue.size();

            for (int i = 0; i < size; i++) {
                Point now = queue.poll();

                for (int j = 0; j < 4; j++) {
                    int nextX = now.x + dx[j];
                    int nextY = now.y + dy[j];

                    if (nextX >= 0 && nextY >= 0 && nextX < n && nextY < m) {
                        if (board[nextX][nextY] == 0) {
                            board[nextX][nextY] = 1;
                            day[nextX][nextY] = day[now.x][now.y] + 1;
                            queue.offer(new Point(nextX, nextY));
                        }
                    }
                }
            }
        }
    }

코드의 bfs 메서드이고, 큐의 사이즈만큼 순회하는 로직

int size = queue.size();

for (int i = 0; i < size; i++) {
    Point now = queue.poll();

을 추가했습니다.

 

결과나 과정 측면에서 봤을 때, 강의에서의 코드와 무슨 차이가 있는지 모르겠는데, 혹시 성능 상에서 기존 코드보다 많이 떨어지는 코드일까요?

 

이렇게 작성해도 되는지 궁금합니다. 이전 bfs 강의에서는 이렇게 큐의 사이즈를 구해서 순회하는 로직을 사용하더라구요.

답변 1

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

네. 큐 사이즈를 구해서 하는 위와 같은 방법이 성능은 큰 차이가 없으나 복잡한 문제를 풀 때 더 좋은 방법입니다. 이 방법을 추천합니다.

재영님의 프로필 이미지
재영

작성한 질문수

질문하기