반응형

17478번 재귀함수가 뭔가요?

악명높은 재귀함수가 시작됐다...
지식인분들의 추천으로 정렬 전에 재귀함수를 하라하셔서 재귀부터 뿌셔보고 정렬을 다시 정복하려한다.
수 정렬하기는 브론즈1이였는데 이왜실5?

재귀횟수 1<=N<=50
재귀횟수에 따른 챗봇의 응답을 출력
ㅋㅋㅋㅋㅋ출력이 웃기다 근데 저걸 어케 구현하지?

일단 메서드부터 만들어서 Depth에 따른 출력값을 정해보자...

"재귀함수가 뭔가요?"
"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."

까지가 기본 출력값이라 생각된다.
이걸 함수 depth에 따라 나눠야하는데 위치가 중요할 것이다. 잘 고민해서 넣어보자

--------


hint
1depth당 ____(언더바임 사이드바 아님)이 들어간다. 참고해서 잘 보자

재귀하는 부분을 기준으로 위 아래로 나뉜다.

 

----

아래

이후 마지막 depth에 정답 호출과 첫 값 출력에 잊지말자.

--------

solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import java.util.Scanner;
 
public class Main {
        static int repeatn;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        
        System.out.println("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.");
        repeatn = n;
        
        myrepeat(0, n);
    }
    
    public static void myrepeat(int num, int n) {
        String s = "____";
        if(n >= 0) {
            for(int i = 0; i < num; i++) {
                System.out.print(s);
            }
            System.out.println("\"재귀함수가 뭔가요?\""); // s.repeat() 이건 자바11에서만사용
            if(n != 0) {
            
                for(int i = 0; i < num; i++) {
                    System.out.print(s);
                }
                System.out.println("\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.");
                
                for(int i = 0; i < num; i++) {
                    System.out.print(s);
                }
                System.out.println("마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.");
                
                for(int i = 0; i < num; i++) {
                    System.out.print(s);
                }
                System.out.println("그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"");
            }
            
            myrepeat(num+1,n-1);
            
            if(n == 0) {
                for(int i = 0; i < num; i++) {
                    System.out.print(s);
                }
                System.out.println("\"재귀함수는 자기 자신을 호출하는 함수라네\"");
            }
            
            for(int i = 0; i < num; i++) {
                System.out.print(s);
            }
            
            if(num == 0) {
                System.out.println("라고 답변하였지.");
            }else {
                System.out.println("라고 답변하였지.");
            }
        }
    }
}
cs

 


실행시간 - 332ms

머릿속에서 한번에 생각해서 구현은 참.... 어렵다...
하다가 포기하고 구현하면서 생각 계속한거같다
결국 재귀함수에 두개의 정수를 입력받아야 구현이 됐다...
이것도 역시 깔끔하지 못해 아쉽지만 지금은 구현에 만족!!!

ps. 오타도 복붙해서 없고 문제될게 없는데 했는데... 하이픈(-)이 아니라 언더바(_)였다.... 아니 저거 누가봐도 띄엄띄엄 있어서 하이픈인줄.....

이거때문에
시간을 얼마나 먹은건지... 문제의 조건을 잘 봐야한다는 것을 이번에도 또 느끼게 됐다...

또, 조건에서 언더바말고도 마지막에 \n들어가는게 문제인가 해서 해당 조건도 추가해놨는데 그 부분은 문제가 없었다.

 

반응형

+ Recent posts