[실버 3] 4779번 칸토어 집합

2025. 6. 17. 15:29·Coding Test/백준[JAVA]

문제

칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로, 구간 [0, 1]에서 시작해서 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만든다.

전체 집합이 유한이라고 가정하고, 다음과 같은 과정을 통해서 칸토어 집합의 근사를 만들어보자.

1. -가 3N개 있는 문자열에서 시작한다.

2. 문자열을 3등분 한 뒤, 가운데 문자열을 공백으로 바꾼다. 이렇게 하면, 선(문자열) 2개가 남는다.

3. 이제 각 선(문자열)을 3등분 하고, 가운데 문자열을 공백으로 바꾼다. 이 과정은 모든 선의 길이가 1일때 까지 계속 한다.

예를 들어, N=3인 경우, 길이가 27인 문자열로 시작한다.

---------------------------

여기서 가운데 문자열을 공백으로 바꾼다.

---------         ---------

남은 두 선의 가운데 문자열을 공백으로 바꾼다.

---   ---         ---   ---

한번 더

- -   - -         - -   - -

모든 선의 길이가 1이면 멈춘다. N이 주어졌을 때, 마지막 과정이 끝난 후 결과를 출력하는 프로그램을 작성하시오.

 

입력

입력을 여러 줄로 이루어져 있다. 각 줄에 N이 주어진다. 파일의 끝에서 입력을 멈춘다. N은 0보다 크거나 같고, 12보다 작거나 같은 정수이다.

 

출력

입력으로 주어진 N에 대해서, 해당하는 칸토어 집합의 근사를 출력한다.

 

예제 입력 1

0
1
3
2

 

예제 출력 1

-
- -
- -   - -         - -   - -
- -   - -

 


import java.io.*;
import java.util.*;

public class Main {
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringBuilder sb = new StringBuilder();

        String str;
        while((str = br.readLine()) != null) {
            int N = Integer.parseInt(str);

            if(N == 0) sb.append("-").append("\n");
            else {
                int sqrt = 1;
                for(int i=0; i<N; i++) {
                    sqrt *= 3;
                }

                String[] arr = new String[sqrt];
                for(int i=0; i<sqrt; i++) {
                    arr[i] = "-";
                }

                int a = sqrt;
                while(a > 1) {
                    a /= 3;
                    for(int i=a; i<sqrt; i+=(a * 2)) {
                        for(int j=i; j<i+a; j++) {
                            arr[j] = " ";
                        }
                    }
                }
                for(int i=0; i<sqrt; i++) {
                    sb.append(arr[i]);
                }
                sb.append("\n");
                
            }
        }
        
        bw.write(sb.toString());
        bw.newLine();
        
        br.close();
        bw.flush();
        bw.close();
    }
}
저작자표시 비영리 변경금지 (새창열림)

'Coding Test > 백준[JAVA]' 카테고리의 다른 글

[실버 3] 15651번 N과 M (3)  (0) 2025.06.18
[실버 3] 15649번 N과 M (1)  (0) 2025.06.18
[실버 5] 2740번 행렬 곱셈  (0) 2025.06.17
[실버 3] 24060번 알고리즘 수업 - 병합 정렬 1  (0) 2025.06.17
[실버 4] 1920번 수 찾기  (0) 2025.06.16
'Coding Test/백준[JAVA]' 카테고리의 다른 글
  • [실버 3] 15651번 N과 M (3)
  • [실버 3] 15649번 N과 M (1)
  • [실버 5] 2740번 행렬 곱셈
  • [실버 3] 24060번 알고리즘 수업 - 병합 정렬 1
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    Linux
    자바
    CS지식
    리눅스
    리눅스마스터 1급
    스프링 부트 쇼핑몰 프로젝트 with JPA
    postgresql
    spring
    플러터
    백준
    DB
    springboot
    CS
    baekjoon
    프로그래머스
    데이터
    JPA
    스프링부트
    스프링
    pcce 기출문제
    Java
    시큐리티
    programmers
    python
    데이터베이스
    Spring Security
    backjoon
    리눅스마스터
    Oracle
    Flutter
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[실버 3] 4779번 칸토어 집합
상단으로

티스토리툴바