https://www.acmicpc.net/problem/2448
실패이유
: 구현실패
def star(x, y, height): # 가장 위의 꼭지점 좌표가 입력으로 들어온다.
if height == 3: # 높이가 3인 경우 제일 작은 삼각형
board[y][x] = True # 첫 번째 줄
board[y + 1][x - 1] = board[y + 1][x + 1] = True # 두 번째 줄
for i in range(x - 2, x + 3): # 세 번재 줄
board[y + 2][i] = True
return
star(x, y, height // 2) # 큰 삼각형의 윗 삼각형
star(x - height // 2, y + height // 2, height // 2) # 큰 삼각형의 왼쪽 아래 삼각형
star(x + height // 2, y + height // 2, height // 2) # 큰 삼각형의 오른쪽 아래 삼각형
n = int(input())
board = [[False] * (n * 2 - 1) for _ in range(n)]
star(n - 1, 0, n)
for y in range(n):
for x in range(2 * n - 1):
if board[y][x]:
print('*', end='')
else:
print(' ', end='')
print()
입력값 n
이 높이가 되고,입력값 n * 2 - 1
이 너비가 된다.star
재귀 함수에 매개 변수로 전달되는 x, y 좌표는 삼각형의 맨 위 꼭지점 좌표이다.- 삼각형의 높이가 3 보다 큰 경우, 높이를 반으로 줄여 작은 삼각형으로 분할한다.
- 위쪽 삼각형
- 왼쪽 아래 삼각형
- 오른쪽 아래 삼각형
- 삼각형의 높이가 3인 경우, 더 이상 쪼갤 수 없으므로 삼각형을 채운다.
출처: 알고리즘 중급 1/3 강의
https://code.plus/course/43노력의 천재 님 블로그
https://transferhwang.tistory.com/316