Algorithm (PS)

[백준] 2448 별 찍기 - 11 쉽지 않은 백트래킹 & 재귀함수 유형 !

minjiwoo 2022. 2. 6. 13:28
728x90

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

 

2448번: 별 찍기 - 11

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

www.acmicpc.net

1. 우선 graph의 원소들을 초기화 한다 ! 

2. 나는 n ==3 이면 가장 기본 모양의 삼각형이므로, n==3 이면 별 모양을 넣어주는 걸로 풀었다

n==3일때의 삼각형 모양이 반복되어 만들어지기 때문이다 !! 

3. n==3 일때 별을 찍고, 이 모양이 반복되므로, x좌표와 y좌표값을 찾아서 반복해 주면 되는데, 

그것이 star 함수를 재귀 호출 한 부분이다 

왼쪽 아래 부분, 오른쪽 아래 부분, 그리고 현재 x,y 부분을 나눠서 별을 찍는다고 생각하면 간단하다..

star(x, y, NEXT) // 맨 위 그러니까 현재 x, y 좌표부터 계산하는 부분이다. 

star(x+NEXT, y+NEXT, NEXT) // 오른쪽 아래 부분

star(x+NEXT, y-NEXT, NEXT) // 왼쪽 아래 부분

n = int(input())

graph = [[' ']*2*n for _ in range(n)]

def star(x, y, n):
    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:
        NEXT = n//2
        star(x, y, NEXT)
        star(x+NEXT, y+NEXT, NEXT)
        star(x+NEXT, y-NEXT, NEXT)

star(0, n-1, n)
for i in graph:
    print("".join(i))

  

728x90