#include <iostream> #include <vector> using namespace std; char board[3072][6143]; void init(int N){ for(int i=0;i<N;i++) fill(board[i], board[i]+2*N, ' '); int temp = N; for(int i=0;i<N;i++) { for(int j=N-i;j<=temp+i;j++) { board[i][j] = '*'; } } } void star(int y, int x, int size){ int st = x-size/2+1; int en = x+size/2-1; for(int i=y+size/2;i<y+size;i++) { for(int j=st;j<=en;j++) { board[i][j] = ' '; } st++; en--; } if(size == 3) return; star(y, x, size/2); star(y+size/2, x-size/2, size/2); star(y+size/2, x+size/2, size/2); return; } int main() { ios::sync_with_stdio(0); cin.tie(0); int N; cin >> N; init(N); star(0, N, N); for(int i=0;i<N;i++) { for(int j=1;j<2*N;j++) cout<<board[i][j]; cout << '\n'; } return 0; }
- 로직
1)board[][]
를 모두' '
으로 초기화/* 반드시 넓이는 2*N으로 해야함 --> 정답 채점이 공백과 널문자를 구분하기때문 */ for(int i=0;i<N;i++) fill(board[i], board[i]+2*N, ' ');
2) x좌표 N을 중심으로 증가해가며 별모양으로 init!
3) 현재 중앙 삼각형 부분을 공백처리한 후 재귀로 순환!
- 주의할 점
1) 배열의 높이는 최대 N / 넓이는 최대 2N 이다!
2) x좌표가 0인 부분은 출력하지 않아야 한다
--> 입출력 형식 맞춰주기 위함