-
[백준] 17478번 : 재귀함수가 뭔가요? - 자바(JAVA)알고리즘/백준 2022. 2. 20. 00:01
https://www.acmicpc.net/problem/17478
문제 해석
재귀 함수를 어떻게 활용할 수 있는지에 대한 문제입니다.
문제 풀이 전 설계
"를 출력하기 위해서는 \"를 사용해야 한다.
출력이 많으므로 StringBuilder에 쌓아서 한 번에 출력한다.
재귀 함수 호출하기 전에 실행해야 하는 구문들
"재귀 함수가 뭔가요?"
"잘 들어보게.~"
"마을 사람들은~"
"그의 답은~"
재귀 함수를 호출한 후에 실행해야 하는 구문들
"라고 답변하였지."
재귀 함수의 종료 조건에 실행해야 하는 구문들
"재귀 함수가 뭔가요?"
"재귀 함수는 자기 자신을 호출해야 하는~"
"라고 답변하였지"
이렇게 3가지로 나누어서 이해하시면 좋습니다.
코드 1
import java.util.Scanner; public class Main { static int temp; static StringBuilder sb = new StringBuilder(); public static void main(String[] args) { // TODO Auto-generated method stub int n = new Scanner(System.in).nextInt(); temp = n; sb.append("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n"); recursionMethod(n); System.out.println(sb.toString()); } static void recursionMethod(int n) { if (n == 0) { for (int i = 0; i < temp - n; i++) { sb.append("____"); } sb.append("\"재귀함수가 뭔가요?\"\n"); for (int i = 0; i < temp - n; i++) { sb.append("____"); } sb.append("\"재귀함수는 자기 자신을 호출하는 함수라네\"\n"); for (int i = 0; i < temp - n; i++) { sb.append("____"); } sb.append("라고 답변하였지.\n"); return; } for (int i = 0; i < temp - n; i++) { sb.append("____"); } sb.append("\"재귀함수가 뭔가요?\""+ "\n"); for (int i = 0; i < temp - n; i++) { sb.append("____"); } sb.append("\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n"); for (int i = 0; i < temp - n; i++) { sb.append("____"); } sb.append("마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n"); for (int i = 0; i < temp - n; i++) { sb.append("____"); } sb.append("그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"\n"); recursionMethod(n - 1); for (int i = 0; i < temp - n; i++) { sb.append("____"); } sb.append("라고 답변하였지.\n"); } }
코드 2
import java.util.Scanner; public class Main { static String underBar = ""; static String sArr[]; public static void recursive(int num) { String temp = underBar; if (num == 0) { System.out.println(temp + sArr[0]); //재귀함수가 뭔가요? System.out.println(temp + sArr[4]); //재귀함수는 자기 자신을 호출하는 함수라네 System.out.println(temp + sArr[5]); //라고 답변하였지 return; } for (int i = 0; i < 4; i++) // 재귀호출하면서 반복되는 네개의 문장 System.out.println(temp + sArr[i]); underBar += "____"; // 호출될 때 마다 밑줄이 4개씩 증가 recursive(num - 1); System.out.println(temp + sArr[5]); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); System.out.println("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다."); sArr = new String[6]; sArr[0] = "\"재귀함수가 뭔가요?\""; sArr[1] = "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어."; sArr[2] = "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지."; sArr[3] = "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\""; sArr[4] = "\"재귀함수는 자기 자신을 호출하는 함수라네\""; sArr[5] = "라고 답변하였지."; recursive(N); sc.close(); } }
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 7576번 : 토마토 (0) 2022.02.25 [백준] 2531번 : 회전 초밥 - 자바(JAVA) (0) 2022.02.25 [백준] 3085번 : 사탕 게임 - 자바(JAVA) (0) 2022.02.17 [백준] 1965번 : 상자넣기 - 자바(JAVA) (0) 2022.02.16 [백준] 1931번 : 회의실 배정 - 자바(JAVA) (0) 2022.02.12