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

YEONGHUN KO님의 프로필 이미지

작성한 질문수

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

6. 바둑이 승차(이진트리 DFS)

재귀를 최소화 하는 방법이 있을까요?

21.05.06 16:46 작성

·

179

0

바둑이들을 오름차순으로 정렬하고 dfs를 돌리면 한 번만에 바로 구해지더라구요.

근데 재귀의 원리를 배우기 위함이라서 정렬을 하지 않는건가요?

답변 3

0

ehrbs2018님의 프로필 이미지

2022. 10. 14. 18:16

if (sum > c || sum < answer) return;

이거 말씀하시는듯

0

YEONGHUN KO님의 프로필 이미지
YEONGHUN KO
질문자

2021. 05. 07. 11:50

미리 정렬한다는 말은 dfs를 돌리기전에 바둑이를 [81,61,58,42,33] 으로 정렬하고 하나씩 더해간다는 말입니다.

그럼 큰수부터 더해나가니깐 max에 더 빨리 도달하므로 정렬되지 않았을때보다 dfs를 덜 호출하므로 정렬하는게 낫지않을까 라는 질문이었습니다:) 

0

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

2021. 05. 07. 05:10

안녕하세요^^

미리 정렬하고 DFS를 돌리면 한 번만에 나온다는게 뭔지 모르겠네요. 어자피 DFS를 돌려야 하는데....

재귀를 시간복잡도 단축하는 방법은 컷에지 방식을 주로 씁니다. 답이 나오지 않을 가지를 미리 예측해서 뻗어나가지 않는 방식입니다. 영상에서는 설명하지 않았지만 제가 제공한 소스코드에 보시면 아래와 같은 코드가 추가되어 있습니다. 이 코드를 하면 컷에지가 되어 많이 단축됩니다.

if(sum+(total-tsum)<answer) return;