Notice
Recent Posts
Recent Comments
Link
궤도
[백준] 2447번 : 별찍기 - 10 본문
문제
풀이
지금까지 봐온 별찍기 문제 중에서 가장 어려웠다. 바로 출력하는건 정말 어려울 것 같아서 배열을 만들었다. 재귀함수를 돌리며 배열에 적당히 값을 넣어주고 한번에 출력하면 될 것 같았다. 배열을 9등분 한다고 했을 때, 가운데를 제외한 모든 구역에 대해 재귀함수를 호출한다. 배열의 크기가 1x1이 되면 호출을 끝내면 될 것이다. 어차피 가운데에 대해서는 함수가 호출되지도 않을테니 바로 별을 넣어주면 된다. 재귀함수의 인자로는 뭐가 있으면 될까. 전체 배열, 부분 배열의 왼쪽 맨위 좌표, 부분 배열의 크기를 넣으면 된다.
소스코드
#include <iostream>
#include <memory.h>
using namespace std;
void star(char** matrix, int x, int y, int n) {
if (n == 1)
matrix[x][y] = '*';
else {
for (int i = x; i < x + n; i += (n / 3)) {
for (int j = y; j < y + n; j += (n / 3)) {
if (i != (x + (n / 3)) || j != (y + (n / 3)))
star(matrix, i, j, n / 3);
}
}
}
}
int main() {
int N;
cin >> N;
char** matrix = new char* [N];
for (int i = 0; i < N; i++)
matrix[i] = new char[N];
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
matrix[i][j] = ' ';
star(matrix, 0, 0, N);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
cout << matrix[i][j];
cout << '\n';
}
}
Comments