문제
4779호: 칸토어 운동
Cantor 집합은 0과 1 사이의 실수 집합으로, (0, 1) 구간에서 시작하여 각 구간을 3분의 1로 나누고 중간 구간을 제외하는 것을 반복하여 구성합니다. 전체 집합이 유한하다고 가정하면,
www.acmicpc.net
코드
import java.util.*;
import java.io.*;
public class Main {
static int n;
static StringBuilder sb;
public static void main(String() args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
while((str = br.readLine()) != null) {
n = Integer.parseInt(str);
int len = (int)Math.pow(3, n);
sb = new StringBuilder();
for(int i=0 ; i < len ; i++) {
sb.append("-");
}
func(0, len); // 시작 인덱스, 시작 길이
System.out.println(sb);
}
}
public static void func(int start, int size) {
if(size == 1) {
return;
}
int newSize = size / 3;
for(int i = start + newSize ; i < start + 2 * newSize ; i++) {
sb.setCharAt(i, ' ');
}
func(start, newSize);
func(start + 2 * newSize, newSize);
}
}
솔루션 아이디어
– 분할정복 → 재귀함수
– 함수 func에서 for 문 청킹 및 범위
가 어렵다…

(참조)
– 해결책
(백준/자바) 4779. 칸토어 집합
문제 링크 – https://www.acmicpc.net/problem/4779 코드
velog.io