https://www.acmicpc.net/problem/17478
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class P17478 {
static int n;
static StringBuilder sb = new StringBuilder();
static String[] str = {
"\"재귀함수가 뭔가요?\"\n",
"\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n",
"마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n",
"그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"\n",
"\"재귀함수는 자기 자신을 호출하는 함수라네\"\n",
"라고 답변하였지.\n",
"____"
};
static void recursion(int N) {
if(N==0) {
sb.append(str[6].repeat(n-N));
sb.append(str[0]);
sb.append(str[6].repeat(n-N));
sb.append(str[4]);
sb.append(str[6].repeat(n-N));
sb.append(str[5]);
return;
}
sb.append(str[6].repeat(n-N));
sb.append(str[0]);
sb.append(str[6].repeat(n-N));
sb.append(str[1]);
sb.append(str[6].repeat(n-N));
sb.append(str[2]);
sb.append(str[6].repeat(n-N));
sb.append(str[3]);
recursion(--N);
sb.append(str[6].repeat(n-N-1));
sb.append(str[5]);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
sb.append("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n");
recursion(n);
System.out.println(sb);
}
}
아직 절차지향적 사고에 갇혀.. 아님 그냥 생각을 덜 해서..?
어차피 파라미터로 넘겨주는 변수 N을 직접 --N 할 필요가 없는데 그렇게 해서 마지막 repeat는 (n-N-1)을 하도록 만들어 버렸다.
-> 1. 굳이 변수를 직접 바꿀 필요 없으니 그냥 파라미터로 넘기면서 빼라~
그리고 다른 코드들은 언더바를 정해진 만큼 더하거나, 저 부분을 함수로 빼던데 너무 일차적으로 해결한 감이 있다.
또 어차피 재귀라 코드 상으로 문장들을 반복해서 쓸 일이 적은데 냅다 배열로 만들어버렸다는 점이다.
굳이 해서 직관성이 떨어진 느낌
그리고 첫 번째 문장은 base condition일 때도 아닐 때도 포함 되므로 위로 빼도 된다는걸 캐치하지 못 했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class P17478 {
static int n;
static StringBuilder sb = new StringBuilder();
static void recursion(int N) {
sb.append("____".repeat(N));
sb.append("\"재귀함수가 뭔가요?\"\n");
if(N==n) {
sb.append("____".repeat(N));
sb.append("\"재귀함수는 자기 자신을 호출하는 함수라네\"\n");
sb.append("____".repeat(N));
sb.append("라고 답변하였지.\n");
return;
}
sb.append("____".repeat(N));
sb.append("\"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.\n");
sb.append("____".repeat(N));
sb.append("마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.\n");
sb.append("____".repeat(N));
sb.append("그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.\"\n");
recursion(N+1);
sb.append("____".repeat(N));
sb.append("라고 답변하였지.\n");
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
sb.append("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.\n");
recursion(0);
System.out.println(sb);
}
}
크게 다른 것 같진 않지만 ^-^
BFS는 그래도 재밌었는데, 이건 진짜 접근부터가 너무 생소해서 어렵다
계속 풀다보면 늘겠지~