본문 바로가기
백준

[백준]2447. 별 찍기 - 10 문제풀이 (파이썬, python)

by 장인이 2021. 2. 14.

www.acmicpc.net/problem/2447

 

2447번: 별 찍기 - 10

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이

www.acmicpc.net

위 문제는 재귀적인 패턴으로 별을 찍어보는 문제이다.

 

문제의 특징을 정리해보자면,

1. 3의 거듭제곱의 수가 입력된다 (이때 지수는 1<=k<8)

2. 크기 N은 N*N의 정사각형 모양을 지닌다

3. 크기 3의 패턴은 가운데에 공백이 있으며, 이를 제외한 칸에 별이 있는 형태이다.

3-1. 크기 N은 가운데가 공백인 (N/3)*(N/3) 정사각형을 N/3의 패턴으로 나타낸 것임.

 

 

문제 조건을 잘 읽어보면,

1. 크기가 N이라면 그 전단계인 N/3인 정사각형을 이용하여 배열하게 됨

2. 따라서, 크기를 나타내는 int값 한개, 전 단계의 배열을 지닌 list 한개, 총 2개의 파라미터를 받는 재귀함수를 제작

이런 해결방법을 떠올릴 수 있다.

 

이를 바탕으로 코드를 작성해보면,

def star(n: int, x: list)-> list:
    out = [] # 한번 처리한 값
    if n == 3:
        return x
    else:
        for i in x: # 위에 처음 3개의 구역
            out.append(i*3)
        for i in x: # 가운데 3개의 구역 (중앙 비어있음)
            out.append(i+' '*len(x)+i)
        for i in x: # 마지막 3개의 구역
            out.append(i*3)
        return star(n//3, out)

if __name__ == "__main__":
    n = int(input())
    first = ['***', '* *', '***']
    final = star(n, first)
    for i in final:
        print(i)

이런 코드가 나온다.

 

예를 들어 81 입력시,

*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
* *   * *         * *   * ** *   * *         * *   * ** *   * *         * *   * *
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
***   ******   ******   ***                           ***   ******   ******   ***
* *   * ** *   * ** *   * *                           * *   * ** *   * ** *   * *
***   ******   ******   ***                           ***   ******   ******   ***
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
*********         *********                           *********         *********
* ** ** *         * ** ** *                           * ** ** *         * ** ** *
*********         *********                           *********         *********
***   ***         ***   ***                           ***   ***         ***   ***
* *   * *         * *   * *                           * *   * *         * *   * *
***   ***         ***   ***                           ***   ***         ***   ***
*********         *********                           *********         *********
* ** ** *         * ** ** *                           * ** ** *         * ** ** *
*********         *********                           *********         *********
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
***   ******   ******   ***                           ***   ******   ******   ***
* *   * ** *   * ** *   * *                           * *   * ** *   * ** *   * *
***   ******   ******   ***                           ***   ******   ******   ***
***************************                           ***************************
* ** ** ** ** ** ** ** ** *                           * ** ** ** ** ** ** ** ** *
***************************                           ***************************
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
* *   * *         * *   * ** *   * *         * *   * ** *   * *         * *   * *
***   ***         ***   ******   ***         ***   ******   ***         ***   ***
*********         ******************         ******************         *********
* ** ** *         * ** ** ** ** ** *         * ** ** ** ** ** *         * ** ** *
*********         ******************         ******************         *********
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
* *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * ** *   * *
***   ******   ******   ******   ******   ******   ******   ******   ******   ***
*********************************************************************************
* ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *
*********************************************************************************

이런 출력이 나오게 된다.

댓글