항상 별찍기 문제는 어려운것같다.
이 문제는 별을 찍는 패턴을 보면 3일때 찍는 것들이 연속적으로 있고, 꼭 3개씩 반복된다.
이런 문제는 재귀의 전형적인 문제라고 볼수있다. 그런데 패턴을 찾아내기가 여간 쉽지않았다.
그리고 처음부터 출력을 할려고 하니 막막했는데, 배열을 써서 배열에 넣을 생각으로 하니깐 할만 했던것같다.
소스코드는 제법 간단하다. n=3일때, 파라미터로 들어온 좌표를 갖고 배열의 값을 변경해준다.
그리고 파라미터들을 조합해서, 좌표들을 조정해서 다시 함수를 호출하는 방식이다.
#include <iostream>
#include <vector>
using namespace std;
const int MAX = 10000;
bool board[MAX][MAX];
void input_star(int n, int x, int y) {
if (n == 3) {
board[x][y] = true;
board[x + 1][y - 1] = true;
board[x + 1][y + 1] = true;
for (int i = 0; i < 5; i++) {
board[x + 2][y - i + 2] = true;
}
return;
}
input_star(n / 2, x, y);
input_star(n / 2, x + n / 2, y - n/2 );
input_star(n / 2, x + n / 2, y+n/2);
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0);
int input;
cin >> input;
for (int i = 0; i < input; i++) {
for (int j = 0; j < 2 * input - 1; j++) {
board[i][j] = false;
}
}
input_star(input,0,input-1);
for (int i = 0; i < input; i++) {
for (int j = 0; j < 2*input-1; j++) {
if (board[i][j]) cout << "*";
else cout << " ";
}
cout << endl;
}
}
'Development > BOJ' 카테고리의 다른 글
[BOJ] 백준 1600번 : 말이 되고싶은 원숭이 C++ : 아주정은 (0) | 2020.02.26 |
---|---|
[BOJ] 백준 17071번 : 숨바꼭질 5 C++ : 아주정은 (0) | 2020.02.26 |
[BOJ] 백준 3197번 : 백조의 호수 C++ : 아주정은 (0) | 2020.02.20 |
[BOJ] 백준 11967번 : 불켜기 C++ : 아주정은 (0) | 2020.02.20 |
우선순위 큐 비교연산자 사용법 (0) | 2020.02.20 |