알고리즘/백준 알고리즘
백준 2448번 별찍기 - 11[C++]
빠켱이
2020. 8. 1. 01:25
2448번 문제는 푸는 사람마다 여러 방법으로 풀 수 있지만 저는 재귀를 사용하였습니다.
위 그림처럼 같은 색 네모 안에 있는 모양이 반복된다고 생각했습니다. 따라서 각 네모의 가장 위에 있는 별의 좌표와 그 네모의 사이즈를 매개변수로 하여 재귀 함수를 만들었고 주황색 네모 사이즈가 나오면 해당 배열에 '*'이 들어가야 하는 부분에 별을 넣는 방식으로 함수를 만들었습니다.
초기 배열은 fill함수를 이용하여 공백으로 초기화하였습니다.
#include <iostream>
#include <algorithm>
using namespace std;
char arr[3100][6200];
void star(int x, int y, int z);
int main() {
int N;
scanf("%d", &N);
fill(&arr[0][0], &arr[0][0] + 3100 * 6200, ' '); //배열을 공백으로 초기화
star(0, N - 1, N);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N * 2; j++) {
printf("%c", arr[i][j]);
}
printf("\n");
}
return 0;
}
void star(int x, int y, int z) {
if (z != 3) {
star(x, y , z / 2);
star(x + z / 2, y - z / 2, z / 2);
star(x + z / 2, y + z / 2, z / 2);
}
else {
arr[x][y] = '*';
arr[x + 1][y - 1] = '*';
arr[x + 1][y + 1] = '*';
for (int i = -2; i <= 2; i++)
arr[x + 2][y + i] = '*';
}
}
혹시 코드에 오류가 없는데 틀렸다고 나오시는 분은 공백 출력에 유의해 주세요