#include <iostream>
#include <vector>
using namespace std;
void star(int num, int x, int y, vector<vector<char>>& stars);
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int num;
cin >> num;
vector<vector<char>> stars(num);
for (int i = 0; i < num; i++) //생성
{
for (int j = 0; j < num; j++)
stars[i].push_back('*');
}
star(num, 0, 0, stars);
for (int i = 0; i < num; i++) //출력
{
for (int j = 0; j < num; j++)
cout << stars[i][j];
cout << "\n";
}
return 0;
}
void star(int num, int x, int y, vector<vector<char>> &stars)
{
if (num < 3) return;
for (int i = x + num / 3; i < x + (num / 3 * 2); i++) //빈칸 넣기
{
for (int j = y + num / 3; j < y + (num / 3 * 2); j++)
{
if(stars[i][j] == '*')
stars[i][j] = ' ';
}
}
star(num / 3, x, y, stars);
star(num / 3, x + num / 3, y, stars);
star(num / 3, x + (num / 3 * 2), y, stars);
star(num / 3, x, y + num / 3, stars);
star(num / 3, x, y + (num / 3 * 2), stars);
star(num / 3, x + num / 3, y + num / 3, stars);
star(num / 3, x + num / 3, y + (num / 3 * 2), stars);
star(num / 3, x + (num / 3 * 2), y + num / 3, stars);
star(num / 3, x + (num / 3 * 2), y + (num / 3 * 2), stars);
}
풀이
1. 값을 아예 저장하여 재귀한다.
2. 재귀하며 해당 칸의 값을 빈칸으로 바꿔준다.
- 저장을 하지 않고 하는 다른 방법도 많은 것 같다.
https://www.acmicpc.net/problem/2447
'Algorithm > Baekjoon' 카테고리의 다른 글
[C++] 백준 1197 최소 스패닝 트리 / 최소신장트리 (0) | 2021.10.18 |
---|---|
[C++] 백준 1932 정수 삼각형 (0) | 2021.09.28 |
[C++] 백준 10282 해킹 다익스트라알고리즘 (0) | 2021.04.19 |
[C++] 백준 1325 효율적인 해킹 BFS, DFS (0) | 2021.03.30 |
[C++] 백준 1012 유기농 배추 DFS, BFS (0) | 2021.03.29 |