재귀를 사용하는 문제이다.
종료조건을 높이가 3인 삼각형으로 두고 재귀를 진행한다.
삼각형이 시작하는 row, col을 받아서 재귀를 진행한다.
가장 큰 삼각형은 시작점이 (0,0)이므로 0,0과 입력받은 값을 높이로 재귀 함수를 시작한다.
#include <stdio.h>
#include <math.h>
using namespace std;
int n;
char star[3 << 10][3 << 11];
void solve(int row, int col, int h)
{
if (h == 3)
{
star[row][col + 2] = '*';
star[row + 1][col + 1] = star[row + 1][col + 3] = '*';
for (int i = 0; i < 5; i++)
{
star[row + 2][col + i] = '*';
}
return;
}
h /= 2;
solve(row, col + h, h);
solve(row + h, col, h);
solve(row + h, col + h * 2, h);
}
int main(void)
{
scanf("%d", &n);
solve(0, 0, n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < 2 * n - 1; j++)
{
if (star[i][j] == '*')
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
return 0;
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 11501] 주식 (0) | 2020.12.31 |
---|---|
[백준 1753] 최단경로 (0) | 2020.12.30 |
[백준 5567] 결혼식 (0) | 2020.12.29 |
[백준 11399] ATM (0) | 2020.12.29 |
[백준 5545] 최고의 피자 (0) | 2020.12.29 |
댓글