아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

시에르핀스키 프랙탈

면접 대비

시간 제한1초메모리 제한128 MB

요약
깊이 n인 시에르핀스키 삼각형의 윤곽을 ASCII 문자로 그린다. 그림의 높이는 2^n줄이며 각 줄 끝에 공백을 두지 않고 테스트 사이에 빈 줄을 하나 넣는다.
난이도

보통10점 중 5점

유형
분할 정복, 재귀, 구현, 문자열
정답자
아직 제출이 없습니다

문제

속이 꽉 찬 정삼각형 영역을 생각하자. 이 삼각형을 높이가 절반인 4개의 합동인 작은 정삼각형으로 나눈 뒤, 가운데 삼각형을 제거한다. 남은 3개의 삼각형 각각에 대해 같은 연산을 재귀적으로 반복한다. 이 과정을 무한히 반복하면 넓이가 00인 도형이 만들어진다. 이렇게 만들어지는 프랙탈을 시에르핀스키 삼각형(Sierpinski Triangle)이라고 부른다. 이 도형의 위상 차원(topological dimension)은 22이지만, 하우스도르프–베시코비치 차원(Hausdorff–Besicovitch dimension)은 log⁡(3)/log⁡(2)≈1.58\log(3)/\log(2)\approx 1.58로 정수가 아닌 값을 가진다(그래서 프랙탈이라고 부른다). 참고로 노르웨이 해안선의 하우스도르프–베시코비치 차원은 약 1.521.52이고, 위상 차원은 11이다.

이 문제에서는 주어진 재귀 깊이까지의 시에르핀스키 삼각형 윤곽을 ASCII 문자만으로 그려야 한다. 그리는 해상도가 고정되어 있으므로, 재귀 깊이에 따라 그림의 크기를 적절히 키워야 한다. 더 이상 나누지 않는 가장 작은 삼각형은 슬래시(/) 2개, 백슬래시(\) 2개, 밑줄(_) 2개로 다음과 같이 그린다.

 /\
/__\

더 큰 삼각형을 그리는 방법은 아래 예제 출력을 참고하라. 깊이가 nn인 그림은 정확히 2n2^n개의 행으로 이루어진다. 깊이가 nn인 삼각형은 깊이가 n−1n-1인 삼각형 3개, 즉 왼쪽 아래, 오른쪽 아래, 그리고 그 위 가운데에 놓인 삼각형으로 구성된다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 정수 nn 하나로 주어진다. n=0n=0이 입력되면 입력이 끝난다. 그 외에는 1≤n≤101 \le n \le 10이며, nn은 재귀 깊이를 나타낸다.

출력

각 테스트 케이스마다 시에르핀스키 삼각형의 윤곽을 출력한다. 그림은 2n2^n개의 행으로 이루어진다. 출력은 왼쪽으로 정렬하며, 즉 맨 아래 줄의 가장 왼쪽 슬래시를 첫 번째 열에 출력한다. 어떤 줄에도 끝에 공백이 있어서는 안 된다. 서로 다른 테스트 케이스의 그림 사이에는 빈 줄을 하나 출력하되, 마지막 테스트 케이스 뒤에는 빈 줄을 추가로 출력하지 않는다.

예제3

  1. 예제 1

    입력
    3
    2
    1
    0
    
    예상 출력
           /\
          /__\
         /\  /\
        /__\/__\
       /\      /\
      /__\    /__\
     /\  /\  /\  /\
    /__\/__\/__\/__\
    
       /\
      /__\
     /\  /\
    /__\/__\
    
     /\
    /__\
    
  2. 예제 2

    입력
    1
    0
    
    예상 출력
     /\
    /__\
    
  3. 예제 3

    입력
    2
    0
    
    예상 출력
       /\
      /__\
     /\  /\
    /__\/__\