inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편

촌수계산 문제 질문

해결된 질문

347

우상우

작성한 질문수 1

1

안녕하세요.

위의 코드는 제가 강의를 듣기 전에 작성한 코드입니다.

백준에서 2가지로 주어진 테스트 케이스는 통과하는데 코드를 제출하면 틀렸다고 나옵니다.

코드 어디가 잘못된지를 모르겠습니다.

그리고 강의에서는 dfs 함수에 start 변수만 넣지 않고 count 변수도 넣으셨는데 count변수를 매개변수로 넣지 않고 코드를 작성하는 방법이 있는지 궁금하고, 이러한 방법이 없다면 왜 매개변수로 count 변수를 넣어줘야 하는걸까요?

 

java 코딩-테스트 알고리즘 dfs

답변 1

1

개발자로 취직하기

우상우님 안녕하세요 :)

작성해주신 코드 봤는데 말씀하신 대로 answer라는 전역 변수 관리가 잘못 됐기 때문인 것 같아요.

작성하신 코드에서는 answer를 늘리기만 하고 줄여주는 부분이 없기 때문에
answer라는 변수는 "dfs함수가 호출된 횟수"가 되고 있어요.
즉, 지금 문제의 문맥에서는 "나와 연결된 가족의 수"를 세고 있는 것인데,
우리가 원하는 건 start와 end의 촌수를 계산하는 거라서, 전체를 세는 것이 아니라
거리 계산을 하고 싶은 겁니다.

그래서 해결책은 크게 2가지, 지금처럼 전역변수를 쓰는 방식과 제가 제시한 parameter를 사용하는 방식이에요.
전역 변수를 사용하시려면 dfs를 호출하는 조건문 안에 다음과 같이 answer--를 다시 해주는 부분이 필요해요.

answer++;
dfs(i);
answer--;

이렇게 다시 빼줘야지 거리라는 개념이 되고 전체 가족 수가 되지 않습니다.

 

이런 식으로 전역변수를 매번 더했다 뺐다를 반복하는 것이 코드도 복잡하고 성능도 떨어지기 때문에,
강의에서 설명 드렸던 방식대로 parameter를 전달하는 방식을 사용했어요!

인자로 전달하면 answer를 증감하는 동작을 생략할 수 있습니다.

 

그동안 해왔던 전역변수 증감하는 방식과 약간 다른 문제라서 이것도 한번 쭉 써보시고,
answer라는 값이 dfs 호출마다 어떻게 변하는지, 그래서 어떻게 두 노드 간의 거리를 계산하는지 보시면
조금 더 명확하게 이해할 수 있을 것 같습니다.

 

혹시 부족한 점 있으면 또 질문 남겨주세요! 감사합니다 :)

dfs 부문을 이렇게 작성해도 되나요?

1

74

1

x랑 y를 거꾸로 쓰는 개념이 너무 헷갈립니다...

1

96

2

dfs 파라미터에 count를 넣는이유

1

64

2

graph 채울때 for문 설계 질문

1

72

2

질문있습니다.

1

74

1

다른 강의 언제나오나용?

1

93

2

노드간 거리 계산

1

145

1

안녕하세요, 혹시 다른문제도 여쭤볼 수 있을까요?

1

130

1

최근에 올린 질문, 코드블럭으로 공유드립니다!

1

143

1

질문이 있습니다. dfs 메서드에 order를 이렇게 구현하면 안되는 이유가 무엇인가요?

0

134

2

깊이우선탐색2 백준 24480 수업노트에...

1

119

1

백준 24479 문제 제출 결과 "틀렸습니다" 라고만 나와서 어떤 부분이 틀렸는지 잘 모르겠어요 피드백 부탁드립니다

1

250

3

graph 만들때 boolean[][] 으로 만드는 경우랑 int[][] 나 ArrayList<Integer>[] 로 만드는 기준이 어떻게 되나요?

1

202

2

graph를 2차원 배열 또는 List로 하는 기준을 어떤식으로 잡으면 좋을까요...?

1

224

1

강사님 안녕하세요! 깊이 우선 탐색 2 (백준 24480)에서 제공하는 풀이 코드에서 궁금한 점이 있어서 질문 드립니다!

1

327

3

촌수 계산

1

354

3

연결 요소의 개수 (백준 11724)

1

267

1

백준 24479 문제 시간 초과 질문 드려요

1

382

1

백준 실행시 틀립니다.

1

372

1

재귀대신 스택으로 구현하면 안될까요?

1

409

1

dfs 매개변수에서 y,x 를 왜 순서를 반대로 쓰셨는지 궁금합니다.

1

371

1

안녕하세요 11724번 질문드려요!

2

315

1

출력할 때 BufferedWriter? StringBuilder?

1

510

1

answer++ 위치 질문

1

256

1