문제
![](https://velog.velcdn.com/images/rachi_3/post/89a393f6-320b-4123-bddf-ab5379171440/image.png)
결국 중앙 쪼개기 -> 3등분 -> 하나씩 잡고 똑같이 중앙쪼개기 -> 3등분을 반복하면 된다.
종료조건은 쪼갤것이 없을때가 되고 그전까지는 재귀적으로 처리가 가능하다.
풀이과정
매번 별찍기 또는 칸토어 함수만 만나면 그냥 GG를 치고 풀지 않았었다.
오늘은 처음 도전이였다.
처음에 문제가 원하는 구조를 분석해보고자 하였다.
처음에는 3^(N-1)~2*3^(N-1)을 비우고
그다음부터는 3^(N-2)~2*3^(N-2)을 비우고 옆칸 넘어가는 식으로 3번
그다음은 3^(N-3)~2*3^(N-3)씩 3^2번 반복하는 식이였다.
결국 마지막에 가면 중앙의 한칸을 3^(N-1)번 반복해서 비우는 꼴이 될것이다.
답안
import java.util.Scanner;
public class Cantor{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
Cantor ct=new Cantor();
while (sc.hasNextInt()) {
int N=get_3_Squared(sc.nextInt());
String CantorStr=ct.CantorFunc("-".repeat(N), N, N);
System.out.println(CantorStr);
}
}
public static int get_3_Squared(int number) {
int result=1;
for(int i=0;i<number;i++) result*=3;
return result;
}
public String CantorFunc(String str,int N,int base){
StringBuilder sb=new StringBuilder(str);
int tmp=base/N;
int x=N/3;
if(N==1)
return sb.toString();
else
{
for(int i=0;i<tmp;i++)
for(int j=x+N*i;j<2*x+N*i;j++){
sb.setCharAt(j, ' ');
}
return CantorFunc(sb.toString(), N/3, base);
}
}
}
다른사람들을 보면 다른 부분도 재귀로 구현했지만 나는 아직 이정도밖에 생각이 안났다..