(백준/JAVA) 제4779호: 칸토어 운동

쉬운 목차

문제

코드

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