나 개발자 진짜 되냐?

백준 C++ 17478번 재귀함수가 뭔가요? ( 재귀함수 ) 본문

C++을 시작해봐요!/구현문제를 풀어봤어요!

백준 C++ 17478번 재귀함수가 뭔가요? ( 재귀함수 )

Snow Rabbit 2026. 1. 23. 19:29

 

이번 주는 엄청 춥다.

며칠 전에 내가 여기다가

가끔 추워도 지구온난화 때문에 약해진 거 어쩌고 막 하면서

지구 안타깝다 이런 말 했는데..

 

ㅋㅋ 지구 온난화로 이렇게 북극한파가 오는 거라고도 했다.

긁적...

지구의 나이가 많긴 하다.

아마 나 수명 다할때까진 살아있겠지

정말 화성으로 떠나려나....

신기하기도 하고.. 이상하기도 하고...

뭔가 미안한 마음이 든다. 지구는 참 예쁜데 말이다

다른 외계인들도 우리 지구를 탐내지 않을까?

.. 이렇게 예쁜데 괴롭히니까 미안하달까

 

SF영화를 많이 봤냐고요? 

아니요????

 

오늘은

나를 돌아보는

돌아보는

돌아보는

돌아보는

재귀함수 문제다.


.. 네?

........... 네?

.....

 

재귀함수라는 거 자체는 아는데..

자기 자신을 반복하는 거..

문제는 그런 함수를 구현하는 걸 잘 모른다는 것..

for문으로 하면 될라나?

아님 글자를 발견했을 때 하면 되나..?

while문으로..?

 

함수를 따로 만들어야 하나? 재귀 함수니까?

 

근데 뭔가 이상하다...

문제에서 이 _ _ _ _ 이것도 좀 중요한 거 같은데..

 

제씨는 나에게 3가지 힌트를 주었다.

 

1. 함수를 하나 만들어서 몇 번째 재귀인지 알려줘야 한다.

2. 들여 쓰기를 별도의 반복문을 만들거나 함수를 만들어줘야 한다.

3. 재귀 전과 후를 구별해야 한다.

 

....

전과 후는 무슨 뜻이냐,

라고 답변하였지.

이문장이 마지막에 꼭 들어가야 한다는 점이다.

 

작은 힌트를 남겨주고 떠났다.

 

자기 자신을 호출해줘야 하기 때문에 함수를 만드는 게 좋다고 했다.

그래서.. 음음.. 여기 순서대로 썼다..

 

 

흠.....ㅋㅋㅋㅋㅋ

아 어렵다.

 

그대로 힌트를 따라 했는데도 엄청 어렵다.

 

여기까지 하고 이 친구는 나에게 또 두 가지 문제점을 알려주었다.

1. " _ _ _ _ " 이거 너무 수동적이다. 함수를 만들어라

2. 이거 저 잘 들어보게 옛날옛적 저거 들여 써야 한다. 그래야 _ _ _ _도 들어간다.

 

아! 그리고 중요한 게

이렇게 선언해 준 함수는 main보다 아래 있으면 곤란하다.

 

기억하자.

 

1을 바탕으로 함수를 만들었다

 

2를 바탕으로 들여 쓰기 + 바 수정

 

 

완성!

 

한 줄 알았는데?

보니까 또 문제에 큰따옴표들이 있다...ㅋㅋㅋㅋ

 

큰 따옴표를 출력하기 위해선?

 

\"

해주는 것! 잊지 않았으려나? 난 살짝 잊었다. ㅋㅋㅋ

 

 

글자여서 그런지 되게 힘들다.

이렇게 함수를 만들어야 할지 몰랐는데

그리고 저렇게 두 가지 숫자를 받아서

(depth, N) 계산해야 하는 것도 중요했다.

 

저 들여 쓰기도 살짝 어려웠는데

후에 제씨는 나에게

이렇게 함수 만들 필요 없이

 

string으로 해줘도 된다고 했다.

 

 

string 생성자 기능에는

string ( 개수, 문자 ) 해서

특정문자를 개수만큼 출력해 주는 기능이 있다고 한다.

 

그래서 이제

string bar = string( depth *4, '-' ) 해주면

출력할 때 

cout << bar << "마을사람들 신선 어쩌고 저쩌고..";

해도 된다는 것이다.

그렇다면 저렇게 하나하나

bar (depth) 해줄 필요도 없었을 것이다 ㅎㅋ

 

아따 진작 알려주지.....

첫 번째에서 들여 쓰기는 없다 보니

depth는 0 시작이 가장 좋고

그래서 재귀함수 시작도 0으로 해주었다.


 

엄청 어려웠다.

재귀함수를 잘 안 접해봐서 그런 건지

그리고 코테에서 시간복잡도가 꽤 큰 편으로 알고 있어서

잘 안 쓰는 걸로 알고 있었다.

그래도 이런 패턴을 숙지해야 한다는 사실을 기억하며..

 

사실 나는 이렇게 함수를 계속 호출하는데 그 함수가 끝나면

어떻게 다시 그 끝?으로 오는지 헷갈렸는데

 

함수는 자신을 호출하면 컴퓨터 메모리에 '스택' 영역에 함수 정보가 쌓인다고 한다.

그래서 상자가 하나씩 쌓이다가

끝나면 사라지면서

바로밑에 있던 상자의 호출했던 시점으로 돌아가기 때문에

계속 그 답변하였다. 이 말이 마지막에 주르르륵 나오는 것이었다.

 

아니 내일 이거 복습? 할 건데 글자가 이래 많아서 어떡하냐고요!!!!!