• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

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

23.08.02 02:06 작성 23.08.02 02:08 수정 조회수 229

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

안녕하세요^^

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