숫자 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() 메서드를 사용하면 정렬 계산 없이도 깔끔한 패턴 출력 코드를 작성할 수 있습니다.