인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

김예린님의 프로필 이미지

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

(기출) 2024년 2회 기출문제 - 이론 포함

2024년 2회 기출문제 (43분대, Java 문제)

해결된 질문

작성

·

54

0

  • (기출) 2024년 2회 기출문제

  • (영상) 43분대

  • 질문

    • return 값이 dcba가 되는 것이 이해가 잘 되지 않습니다.

    1) 코드 흐름을 보면 처음에 result - comp(str, 7, seen); 실행

2) idx가 0보다 크므로, char c = str.charAt(7)

즉 여기서 char c는 d가 됨

3) 그리고 String result = comp(str, 6, seen)으로 comp 함수를 다시 부르는 거죠? (재귀함수)

4) if (!seen[c])는 seen[d]는 처음에는 False이므로, !를 만나 True

5) result = d + result

6) char c = str.charAt(6)

이제 char c는 c가 됨 // 3번에서 호출한 재귀함수 실행

7) 이런식으로 해서 처음 들어오는 값만 result에 저장되다 보니 dcba가 출력되는게 맞나요?

 

추가로 재귀함수를 만나면 아래 if문은 재귀함수가 모두 끝난 이후에 진행되는 것인지, 병렬(?)로 진행되는 것인지 궁금합니다.

답변 2

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

안녕하세요,

우선 1~6번까지 흐름은 맞습니다. 계속 재귀함수를 호출하는 것이고요.

7번은 if(!seen[c])를 보시는 것 맞죠? 여기에는 해당 문자의 아스키코드값에 대한 배열이 false인 경우 다시 느낌표(!는 Not의 의미)로 바꿔서 true로 만든 다음에 c + result를 result에 저장하는 것입니다.

 

그래서 앞에서 나오지 않은 것만 비어있는 문자(" ") 앞으로 붙이면서 최종 리턴하는 것이죠.

이렇게 이해하셨다면 옳게 이해하셨습니다.

 


재귀함수를 만나면 제가 호출한 재귀함수가 끝나기 전까지는 아래로 내려가지 않습니다.

아예 재귀함수라고 생각하지마시고, 내용은 같은데 다른 이름의 함수를 호출한다고 생각해보시면 편합니다.

 

함수1에서 함수2 부르고, 함수2에서 함수3을 부르고.... 마지막에서 리턴하고 다시 리턴하고....

이렇게 된다면 함수1에서는 결국 리턴값이 돌아오기 전까지는 아래 코드를 실행하지 못합니다.

 

재귀함수가 모두 끝난 다음에야 다음 줄로 넘어가셔야합니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 김예린님!

재귀 함수의 동작 방식과 그로 인한 출력 결과에 대해 궁금하신 점, 이해할 수 있도록 설명드리겠습니다. 우선, 질문하신 내용을 기초로 재현해 보겠습니다.

Java 재귀 함수의 작동 방식

  1. 재귀 호출 이해하기:

    • 예를 들어 comp(str, n, seen) 함수가 호출되면, 먼저 char c = str.charAt(n)을 실행하여 현재 n 위치의 문자를 가져옵니다.
    • if (!seen[c]) 조건을 검사하여 해당 문자가 아직 사용되지 않았다면 True로 평가되고 아래 로직을 진행합니다.
    • result = c + result는 재귀 함수에서 앞쪽에 해당 문자를 계속 추가하여 결과를 만듭니다.
    • 재귀 함수가 모든 조건을 만족할 때까지 자신을 반복해서 호출합니다. 이 때, 재귀 호출 후 아래의 나머지 코드는 재귀가 반환될 때까지 대기하게 됩니다.
  2. 재귀의 반환과 결과:

    • 이 과정에서 문자들은 역순으로 쌓이면서 반환됩니다. 그래서 예시에서는 dcba처럼 출력되는 것입니다.
  3. 재귀의 흐름:

    • 재귀는 병렬로 실행되지 않고, 첫 번째 조건이 충족되지 않으면 이전의 함수 호출로 돌아와 아래 코드를 실행합니다.

추가적으로, 유사한 질문이 등록된 게시물이 있어 관련 정보를 제공드립니다:

  • 2024년 2회 17번 재귀함수에서는 재귀함수의 동작 과정과 원리에 대해 추가적인 설명과 해설이 포함되어 있습니다. 이 게시글을 참고하시면 재귀 함수의 동작을 이해하는 데 더 많은 도움을 받으실 수 있을 것입니다.
  • 관련 영상 설명도 여기를 통해 제공되니, 함께 참고 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.