일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 14467번
- 1362번
- 10814번
- 5597번
- 자바
- 1333번
- 14215번
- 14656번
- 2355번
- 백준
- Java
- 24267번
- 나무 공격
- 20953번
- 10409번
- 25642번
- 21964
- Baekjoon
- 14726번
- 티스토리챌린지
- 14592번
- 1568번
- 1141번
- 25904번
- 오블완
- 14322번
- 21866번
- 25576번
- 7489번
- 프로젝트 기획서
- Today
- Total
suheang
[백준] | JAVA, 자바 | 17478번 - 재귀함수가 뭔가요? 본문
https://www.acmicpc.net/problem/17478
문제 요약 :
JH 교수님이 만들 챗봇의 응답을 출력하는 프로그램을 만들어보자.
교수님이 출력을 원하는 재귀 횟수 N(1 ≤ N ≤ 50)이 주어진다.
출력 예시를 보고 재귀 횟수에 따른 챗봇의 응답을 출력한다.
문제 풀이 :
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
sb.append("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다." + "\n");
recursion(n, 0, sb);
System.out.println(sb);
}
private static void recursion(int n, int cnt, StringBuilder sb) {
if (cnt > n) return;
String line = "____";
for (int i = 0; i < cnt; i++) {
sb.append(line);
}
sb.append("\"재귀함수가 뭔가요?\"" + "\n");
if (cnt == n) {
for (int i = 0; i < cnt; i++) {
sb.append(line);
}
sb.append("\"재귀함수는 자기 자신을 호출하는 함수라네\"" + "\n");
} else {
for (int i = 0; i < cnt; i++) {
sb.append(line);
}
sb.append("\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어." + "\n");
for (int i = 0; i < cnt; i++) {
sb.append(line);
}
sb.append("마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지." + "\n");
for (int i = 0; i < cnt; i++) {
sb.append(line);
}
sb.append("그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"" + "\n");
}
recursion(n, cnt + 1, sb);
for (int i = 0; i < cnt; i++) {
sb.append(line);
}
sb.append("라고 답변하였지."+ "\n");
}
}
1. StringBuilder sb 생성
2. 재귀회수 n 입력받기
3. "어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다." 이 문구는 반복되지 않기 때문에 sb에 한 번만 추가
4. 재귀 함수 resursion 호출, 매개변수로 n, cnt, sb 사용
4 - 1. 만약 cnt가 n보다 크다면 리턴
4 - 2. 변수 line을 생성하고 "____" 저장
4 - 3. for 문을 사용해 cnt - 1만큼 line을 sb에 추가
4 - 4. "재귀함수가 뭔가요?" 문구 추가 ("(쌍따옴표) 역시 추가해야 하기 때문에 \" 사용)
4 - 5. 만약 cnt가 n과 같다면 cnt - 1 만큼 line을 sb에 추가하고 "재귀함수는 자기 자신을 호출하는 함수라네" 문구 추가
4 - 6. cnt가 n과 같지 않다면 cnt - 1 만큼 line을 sb에 추가하고
"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.
마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.
그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어." 문구 추가
4 - 7. resursion 호출, 매개변수 cnt에 + 1
4 - 8. cnt - 1 만큼 line을 sb에 추가하고 "라고 답변하였지." 문구 추가
5. 저장된 sb 출력
'알고리즘' 카테고리의 다른 글
[백준] | JAVA, 자바 | 4779번 - 칸토어 집합 (0) | 2024.09.03 |
---|---|
[백준] | JAVA, 자바 | 17298번 - 오큰수 (0) | 2024.09.02 |
[백준] | JAVA, 자바 | 2164번 - 카드2 (1) | 2024.09.01 |
[백준] | JAVA, 자바 | 12789번 - 도키도키 간식드리미 (0) | 2024.08.31 |
[백준] | JAVA, 자바 | 18258번 - 큐2 (0) | 2024.08.31 |