Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬(Python)으로 2n-1줄 다이아몬드 패턴 출력하기

숫자 n이 주어지면, 별표(*)를 사용해 총 2n-1줄로 구성된 다이아몬드(마름모) 패턴을 그려야 합니다. 위쪽 절반인 1번째 줄부터 n번째 줄까지는 별표가 1개에서 n개까지 한 줄에 하나씩 늘어나고, 아래쪽 절반에서는 다시 n-1개부터 1개까지 줄어들며 완벽한 대칭을 이룹니다.


예를 들어 n = 5가 입력되면 출력 결과는 다음과 같습니다.


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

문제 해결 접근 방식


이 문제는 파이썬 문자열의 center() 메서드를 활용하면 간단하게 해결할 수 있습니다. 풀이 단계는 다음과 같습니다.


  • 증가 구간: i가 1부터 n까지 증가하는 동안, '* ' 블록을 i번 반복한 문자열을 만들고, 전체 폭 2n-1칸을 기준으로 가운데 정렬해 출력합니다.
  • 감소 구간: i가 n-1부터 1까지 감소하는 동안, 같은 방식으로 '* ' 블록을 i번 반복해 가운데 정렬하여 출력합니다.

center(width) 메서드는 문자열을 지정한 폭 안에서 중앙에 배치하고, 남는 좌우 공간을 자동으로 공백으로 채워 주기 때문에 다이아몬드 특유의 대칭 구조를 손쉽게 만들 수 있습니다.


예제 코드


아래 구현 예제를 통해 더 자세히 이해해 보겠습니다.


def solve(n):
   for i in range(1, n+1):
      print(('* '*i).center(2*n-1))
   for i in range(n-1, 0, -1):
      print(('* '*i).center(2*n-1))

n = 10
solve(n)

입력


10

출력


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

위 코드에서 첫 번째 반복문은 다이아몬드의 윗부분을, 두 번째 반복문은 아랫부분을 담당합니다. 각 줄의 별표 개수가 먼저 늘어났다가 다시 줄어들면서 시간 복잡도 O(n)만에 완전한 마름모 형태가 완성됩니다. 이처럼 center() 메서드를 사용하면 정렬 계산 없이도 깔끔한 패턴 출력 코드를 작성할 수 있습니다.