본문 바로가기
PS/재귀

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

by 3급우사기 2024. 2. 28.

https://www.acmicpc.net/problem/2448

 

2448번: 별 찍기 - 11

첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수)

www.acmicpc.net

골드문제는 아직 어려워..

 

호기롭게 고른 골드4짜리 문제...

 

...어려웠다..

힌트보고 똥꼬쇼하고 겨우겨우 풀었다...

 

좌표 이거 직접 그려서 일일히 적어봐야 규칙이 보일랑말랑했다..

지능낮아서 힘들다..

 

풀이

 

일단 별을 그려넣을 큰 배열을 만든다.

재귀함수 인자로 n, x좌표, y좌표를 받는다..

star(n//2, x, y)

star(n//2, x+n//2, y- n//2) 

star(n//2, x+n//2, y + n//2)

이부분은 직접 좌표그려서 계산했다..

그리고 n=3이되면 작은 삼각형그려서 마무링....

 

마지막으로 배열 전체 출력끝.

def star(n, x, y):
  if(n == 3):
    arr[x][y] = '*'

    arr[x+1][y-1] = '*'
    arr[x+1][y+1] = '*'

    arr[x+2][y-2] = '*'
    arr[x+2][y-1] = '*'
    arr[x+2][y] = '*'
    arr[x+2][y+1] = '*'
    arr[x+2][y+2] = '*'
    return
  else:
    star(n//2, x, y)
    star(n//2, x+n//2, y- n//2)
    star(n//2, x+n//2, y + n//2)
n = int(input())
arr = [[' ']*(2*n-1) for i in range(n)]
star(n, 0, n-1)
for i in arr:
    print(''.join(i))