일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- HAVE A GOOD DAY
- DFS
- Hamming weight
- Have a nice day.
- have a nice day
- SSAFY 테스트
- 코로나 싫어요
- 텐션 업 10기 화이팅
- LeetCode #릿코드 #좋은 하루 되세요 #Have a nice day
- SSAFY 10기 화이팅
- BFS
- 우유가 옆으로 넘어지면 아야
- 텐션 업 10기!
- 아자아자 화이팅
- Have a good day :)
- SeongSeobDang
- 모르고리즘
- SSAFY IM/A
- SSAFY 화이팅
- 자고 싶다
- 자료구조
- DP
- I am Korean
- 수학
- 우유가옆으로넘어지면아야
- Java 환경 설정
- 우유아야
- amazon
- 네트워크
- Today
- Total
Hope Everyone Is Happy
[실버5] 17478. 재귀함수가 뭔가요? (Java) 본문
[실버5] 17478. 재귀함수가 뭔가요? (Java)
J 크 2023. 8. 15. 14:19https://www.acmicpc.net/problem/17478
17478번: 재귀함수가 뭔가요?
평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대
www.acmicpc.net
재귀 함수는 뭘까요 ??
※ 문제를 요약하면 아래와 같습니다.
▶ 친절한 교수님이 재귀함수를 이해시켜주기 위해 챗봇을 만듬
▶ "어느 한 컴퓨터 공학과 학생이 유명한 교수님을 찾아가 물었다. "로 챗봇의 대화가 시작 (아래 출력 예제 참조)
▶ "재귀함수가 뭔가요?" ~ "잘들어보게~ 라고물었어", 라고 답변하였지를 입력된 수 +1 만큼 반복
▶ 마지막 "재귀 함수가 뭔가요?" 에는 "재귀함수는 자기 자신을 호출하는 함수라네" 출력
▶ 입력은 교수님이 원하는 재귀 횟수 (1 <= N <= 50)
▶ 출력은 예시 참조
◈ Input - 1
2
◈ Output - 1
어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.
"재귀함수가 뭔가요?"
"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
____"재귀함수가 뭔가요?"
____"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
____마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
____그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
________"재귀함수가 뭔가요?"
________"재귀함수는 자기 자신을 호출하는 함수라네"
________라고 답변하였지.
____라고 답변하였지.
라고 답변하였지.
◈ Input - 2
어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.
"재귀함수가 뭔가요?"
"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
____"재귀함수가 뭔가요?"
____"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
____마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
____그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
________"재귀함수가 뭔가요?"
________"재귀함수는 자기 자신을 호출하는 함수라네"
________라고 답변하였지.
____라고 답변하였지.
라고 답변하였지.
◈ Output - 2
어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.
"재귀함수가 뭔가요?"
"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
____"재귀함수가 뭔가요?"
____"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
____마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
____그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
________"재귀함수가 뭔가요?"
________"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
________마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
________그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
____________"재귀함수가 뭔가요?"
____________"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
____________마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
____________그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
________________"재귀함수가 뭔가요?"
________________"재귀함수는 자기 자신을 호출하는 함수라네"
________________라고 답변하였지.
____________라고 답변하였지.
________라고 답변하였지.
____라고 답변하였지.
라고 답변하였지.
◎ 코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.
▶ 반복되는 문장과 반복되는 문장 앞 라인 출력을 위한 매개변수 2개로 재귀 함수 설계
( 필자 본인은 조금 더 가독성을 높이기 위해 2개로 했습니다. 하나로 써도 충분합니다! )
▶ 재귀 함수 호출 시 Stack 자료 구조와 동일하게 메모리가 쌓이는 특징을 활용 ( Last In First Out )
ex) 입력 값 : 4 == > whatIsTheRecursiveFunction(4,0) = 재귀 함수
( 가장 나중에 쌓인 메모리가 가장 먼저 출력 )
: 함수 안, 재귀 함수 호출 전에 출력할 것 ( 출력 후 재귀함수가 Stack에 쌓임 )
"재귀함수가 뭔가요?"
"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."
: 함수 안, 재귀 함수 호출 후에 출력할 것 ( 재귀함수가 Stack에 쌓인 후 나중에 출력 )
________________라고 답변하였지.
: 마지막 재귀 함수 호출일 경우 출력 할 것
"재귀함수는 자기 자신을 호출하는 함수라네"
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
static BufferedWriter bWriter = new BufferedWriter(new OutputStreamWriter(System.out));
public static void whatIsTheRecursiveFunction(int nCount, int nPrintline) throws IOException {
String strTemp = "";
String strLine = "";
for(int i = 0; i < nPrintline; i++)
strLine += "____";
strTemp += strLine + "\"재귀함수가 뭔가요?\"\n";
if(nCount <= 0) {
strTemp += strLine + "\"재귀함수는 자기 자신을 호출하는 함수라네\"\n";
bWriter.write(strTemp);
} else {
strTemp += strLine + "\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n"
+ strLine + "마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n"
+ strLine + "그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"\n";
bWriter.write(strTemp);
bWriter.flush();
// Stack 구조로 쌓임
whatIsTheRecursiveFunction(nCount-1, nPrintline+1);
}
String strT = "";
for(int i = 0; i < nPrintline; i++)
strT += "____";
strT += "라고 답변하였지.\n";
bWriter.write(strT);
bWriter.flush();
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
int nCount = Integer.parseInt(bReader.readLine());
bWriter.write("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n");
whatIsTheRecursiveFunction(nCount, 0);
bWriter.close();
}
}
문제가 재밌어 보여서 골랐는데 막상 풀 때는 귀찮은게 많았네요. 재귀함수의 정의를 아주 잘 기억할 수 있게 해준 문제였습니다.
읽어주셔서 감사합니다!
Good Luck! (피드백 고맙습니다)
'※ 백준 (Baekjoon) > [Java] 문제 풀이 ( Solve the problems)' 카테고리의 다른 글
[실버1] 11729. 하노이 탑 이동 순서 (Java) (0) | 2023.08.17 |
---|---|
[실버2] 23304. 아카라카 (Java) (0) | 2023.08.16 |
[실버3] 3613. Java vs C++ (Java) (0) | 2023.08.13 |
[실버5] 14490. 백대열(Java) (0) | 2023.08.13 |
[실버4] 1302. 베스트셀러 (Java) (0) | 2023.08.13 |