[백준/파이썬] 2448번 별 찍기 - 11 풀이

업데이트:



문제 정보


풀이

문제

높이 N의 삼각형 별 패턴을 출력하는 문제입니다. 작은 삼각형 3개(왼쪽, 오른쪽, 위쪽)를 재귀적으로 배치하는 구조입니다.

코드

n = int(input())

m = 2*n-1
triangle = [[' ']*(m) for _ in range(n)]

for i in range(n):
    for j in range(n-1-i, n+i):
        triangle[i][j] = ' '

def draw_space(cnt, end, row, col, pos):    
    if row == 0:
        triangle[row][col] = \
        triangle[row+1][col-1] = triangle[row+1][col+1] = \
        triangle[row+2][col-2] = triangle[row+2][col-2] = \
        triangle[row+2][col-1] = triangle[row+2][col-0] = \
        triangle[row+2][col+1] = triangle[row+2][col+2] = '*'
    else:
        if pos != "mid":
            for i in range(row, row+cnt):
                for j in range(col-i+row, col+i-row+1):
                    triangle[i][j] = triangle[i-cnt][j + (cnt if pos=="left" else -cnt)]
    
    if pos != "mid" or cnt * 2 > end:
        return
    draw_space(cnt, end, cnt, col-cnt, "left")
    draw_space(cnt, end, cnt, col+cnt, "right")
    draw_space(cnt*2, end, cnt*2, col, "mid")

draw_space(3, n, 0, m//2, "mid")

result = ''
for i in range(len(triangle)):
    result += ''.join(map(str,triangle[i])) + '\n'

print(result)

설명

기본 크기(3) 삼각형을 만든 뒤 이 삼각형을 좌/우로 복사하고, 이를 다시 확장하는 식으로 전체 패턴을 구성합니다.



댓글남기기