알고리즘
[JAVA]백준 4779번: 칸토어 집합
Kwoncorin
2020. 12. 28. 20:28
728x90
4779번: 칸토어 집합
칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로, 구간 [0, 1]에서 시작해서 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만든다. 전체 집합이 유한이라고 가정하고,
www.acmicpc.net
1. 문제 설명
-로 채워진 입력받은 수의 길이의 문자열을 만든 후 선의 길이가 1이 될 때까지 3 등분하고 가운데 문자열은 공백으로 바꾼다.
먼저 char 배열 전체를 공백으로 바꾸고 range가 1이 될때까지 삼등분하면서 재귀 호출하였다.
2. 코드
import java.awt.image.BufferedImageFilter;
import java.io.*;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static char[] list=new char[531441];
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
String input="";
while((input=br.readLine())!=null){
int num=Integer.parseInt(input);
int new_num= (int) Math.pow(3,num);
for(int i=0;i<new_num;i++)
list[i]=' ';
make(0, new_num-1,new_num);
for(int i=0;i<new_num;i++)
bw.write(list[i]);
bw.newLine();
bw.flush();
}
bw.close();
}
public static void make(int first,int last,int range){
if(range==1)
list[first]='-';
else{
int temp_range=range/3;
make(first,first+temp_range-1,temp_range);
make(last-temp_range+1,last,temp_range);
}
}
}
728x90