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