문제 링크
풀이
- 재귀 함수, 분할 정복 문제
이 문제의 핵심은,
n 일 경우 n // 2 의 삼각형 3개로 분리가 가능하다는 것이다.
예를 들어
n 은 6일 때, n 은 3일 때의 삼각형 3개로 분리
n 은 12일 때, n 은 6일 때의 삼각형 3개로 분리
...
따라서 n이 3일 때는 삼각형을 그리고,
나머지 경우에 대해서는 3개의 삼각형으로 나누어 재귀 함수 호출
나눌 때 좌표 값은
draw(x, y, size)
draw(x+size,y-size,size)
draw(x+size,y+size,size)
아래 그림에 표시된 좌표 번호 참고
n = int(input())
graph = [ [" "] * 2*n for _ in range(n) ]
def draw(x, y, n):
# 3일 때 삼각형 그리기
if n == 3 :
# 첫째줄
graph[x][y] = '*'
# 둘째줄
graph[x+1][y-1] = graph[x+1][y+1] = '*'
# 셋째줄
for i in range(-2, 3):
graph[x+2][y+i] = "*"
# 삼등분
else:
size = n // 2
draw(x, y, size)
draw(x+size,y-size,size)
draw(x+size,y+size,size)
draw(0, n-1, n)
for i in graph:
print("".join(i))
'개발 > algorithm' 카테고리의 다른 글
[백준 1918번] 후위 표기식 - python (0) | 2022.03.18 |
---|---|
[백준 5639번] 이진 검색 트리 - python (0) | 2022.03.18 |
[백준 2447번] 별 찍기 - 10 - python (0) | 2022.03.17 |
[백준 17070번] 파이프 옮기기 1 - python (0) | 2022.03.17 |
[백준 1865번] 웜홀 - python (0) | 2022.03.17 |