본문 바로가기
알고리즘

[JAVA]백준 4779번: 칸토어 집합

by Kwoncorin 2020. 12. 28.
728x90

www.acmicpc.net/problem/4779

 

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