inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

38군데 합격 비법, 2026 코딩테스트 필수 알고리즘

2-10. 2주차 끝 & 숙제 설명

더하거나 빼거나 문제 질문

해결된 질문

125

오승택

작성한 질문수 1

0

1. 현재 학습 진도

 

2. 어려움을 겪는 부분

get_all_ways_by_doing_plus_or_minus(array, current_index + 1, current_sum + array[current_index])
get_all_ways_by_doing_plus_or_minus(array, current_index + 1, current_sum - array[current_index]

제가 이해 안가는것은 처음에 cur_index = 0 , cur_sum = 0 부터 시작하잖아요
get_all_ways_by_doing_plus_or_minus(array,1,2)
get_all_ways_by_doing_plus_or_minus(array,1,-2)

그러고 다음 cur_index = 1 , cur_sum = 2 이렇게 흘러가는데,
왜 get_all_ways_by_doing_plus_or_minus(array,1,-2) -2 가 안가고 +2 가 가는지 궁금합니다.

get_all_ways_by_doing_plus_or_minus(array, current_index + 1, current_sum + array[current_index]) 계산이 전부 끝난 뒤에

get_all_ways_by_doing_plus_or_minus(array, current_index + 1, current_sum - array[current_index] 가 이어서 오는건가요 ?

 

 

 

3. 시도해보신 내용

 

이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊

python 코딩-테스트 알고리즘 data-structure

답변 1

0

딩코딩코

안녕하세요 오승택님! 좋은 질문 감사합니다

 

재귀 함수에 대한 질문에 답변드리겠습니다!

이 코드에서 가장 이해하기 어려운 부분은 재귀 호출의 실행 순서입니다. 학생이 혼란스러워하는 부분을 명확히 설명해 드리겠습니다.

재귀 함수가 실행되는 방식은 "깊이 우선 탐색(DFS)"이라고 생각하시면 됩니다. 첫 번째 재귀 호출이 완전히 끝날 때까지 두 번째 재귀 호출은 대기하게 됩니다.

원리를 다음과 같이 설명해 드리겠습니다!

  1. 처음에 get_all_ways_by_doing_plus_or_minus(array, 0, 0)으로 시작합니다.

  2. 이 함수는 두 개의 재귀 호출을 합니다:

    • get_all_ways_by_doing_plus_or_minus(array, 1, 0+1)(array, 1, 1) (더하는 경우)

    • get_all_ways_by_doing_plus_or_minus(array, 1, 0-1)(array, 1, -1) (빼는 경우)

  3. 중요한 점은 첫 번째 호출 (array, 1, 1)이 완전히 끝날 때까지 두 번째 호출 (array, 1, -1)은 실행되지 않습니다.

  4. (array, 1, 1) 호출은 다시 두 개의 호출을 생성합니다:

    • (array, 2, 1+1)(array, 2, 2)

    • (array, 2, 1-1)(array, 2, 0)

  5. 이런 식으로 첫 번째 경로가 끝(배열의 마지막 요소)까지 도달한 후에야 다음 경로가 탐색됩니다.

이것을 트리로 시각화하면 이렇게 됩니다!!

                       (0,0)
                      /     \
                 (1,1)       (1,-1)
                /    \       /    \
           (2,2)    (2,0)  (2,0)  (2,-2)
           ... 이런 식으로 계속됨

코드 실행 순서는 깊이 우선이기 때문에,

  1. (0,0) → (1,1) → (2,2) → ... → 끝까지 간 후

  2. (0,0) → (1,1) → (2,0) → ... → 끝까지 간 후

  3. (0,0) → (1,-1) → (2,0) → ... → 끝까지 간 후

  4. (0,0) → (1,-1) → (2,-2) → ... → 끝까지

따라서 get_all_ways_by_doing_plus_or_minus(array, 1, -2)는 건너뛰는 것이 아니라, get_all_ways_by_doing_plus_or_minus(array, 1, 1)의 모든 하위 호출이 완료된 후에야 실행됩니다.

좋은 질문 감사드립니다! 한 번 디버그 모드 등을 이용해서 순서를 살펴보시는것도 좋을 것 같습니다 혹시 더 궁금하신 점ㅇ 있으시면 편하게 더 질문해주세요! ㅎ.ㅎ

수강평 이벤트

0

34

2

코딩테스트 처음인데 이런 공부방법이어도 괜찮을까요

0

70

2

3-3 정렬-2 선택정렬 로직

0

43

2

링크드 리스트 끝에서 k번째 값 출력하기

0

46

2

LinkedList 과제 Fast, slow 포인터

0

50

2

투포인터 시간복잡도

0

53

2

수강평 작성 후 자료

0

53

2

수업교재 링크 오류

2

114

2

프로그래머스에서 제출 후 채점시 틀림ㅠ

0

133

2

1-10 알고리즘 더 풀어보기(2) 질문 있습니다

0

76

2

문제 풀이 방식 관련 질문입니다!

0

88

2

1-5 알고리즘과 친해지기 (2) - 최빈값찾기 질문 있습니다

0

94

2

수업자료 pdf 받고싶습니다

0

108

2

강의 자료 오류 수정

0

75

1

2-10 더하거나 빼거나 관련 질문입니다

0

63

2

3-8 해쉬 -2

0

49

2

Linked List Element Delete Explanation Problem

0

69

2

강의3-4 스택 탑 문제

0

74

2

코드스니펫 입출력 케이스에 오류가 있는것 같아요

0

100

3

링크드 리스트 원소 찾기 구현 방식 질문드립니다.

0

76

2

1874 - 스택 문항

0

81

2

DP Java 예제 자료형 오버플로우 문제

0

100

2

4-9 4주차 숙제중 농심라면 문제

0

111

2

DFS 에서 스택을 사용하는 이유

1

187

3