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

김김님의 프로필 이미지
김김

작성한 질문수

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

8. 송아지 찾기1(BFS)

missing return statement 관련 질문 드립니다.

작성

·

805

0

강사님이 강의에서 짜주신 코드처럼

while (!q.isEmpty())

로 하면 강의에서 보여주신 것처럼 return 이 따로 없을경우 에러가 나는데 (그래서 강의에서는 따로 return 0; 해주셨어요)

while (true)

로 하면 따로 return 이 없어도 에러가 안납니당 ,,

혹시 while (true) 일때는 return 이 강의에서처럼 따로 없어도 에러가 안나는 이유가 있나요 ..?

 

BFS 함수만 첨부하면 다음과 같습니닷

// 방법3. BFS 상태트리탐색 (최단거리 BFS) - (2) : 로직 자체는 방법2와 동일, 배열 사용 및 코드 리팩토링 !
    public static int BFS2(int S, int E) {
        Queue<Integer> q = new LinkedList<>();
        int[] check = new int[10001];
        int[] go = {-1, 1, 5}; // = 한 번의 점프로 앞으로 1, 뒤로 1, 앞으로 5를 이동할 수 있다.

        // 0번째 세팅
        q.offer(S);
        check[S] = 1;
        int level = 0;

//        while (!q.isEmpty()) {
        while (true) {
            int size = q.size();
            for (int i=0; i<size; i++) {
                int tmp = q.poll();
//                if (tmp == E) {
//                    return level;
//                }

                for (int j=0; j<go.length; j++) {
                    int nx = tmp + go[j];
                    if (nx == E) {
                        return level + 1;
                    }
                    if (check[nx]==0 && 1<=nx && nx<=10000) {
                        q.offer(nx);
                        check[nx] = 1;
                    }
                }
            }
            level++;
        }

    }

 

 

답변 1

0

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

안녕하세요^^

while (!q.isEmpty()) 는 while문이 return문으로 종료될 수도 있지만 큐(q)가 비어서 끝날 수도 있다라고 컴파일러가 판단하기 때문에 이후에 return문을 써주어야 하구요.

while (true) 는 while문이 return문에 의해서만 끝난다고 컴파일러가 판단하기 때문에 굳이 while문 후에 return문을 써주지 않아도 에러가 나지 않습니다. 만약 while문이 break문으로 끝나게 설정하면 return문을 쓰라고 에러가 날겁니다.

 

 

 

김김님의 프로필 이미지
김김

작성한 질문수

질문하기