BOJ 2448 : 별찍기 11 - C++
별찍기 11
코드
#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인 부분은 출력하지 않아야 한다
--> 입출력 형식 맞춰주기 위함
Author And Source
이 문제에 관하여(BOJ 2448 : 별찍기 11 - C++), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@neity16/BOJ-2448-별찍기-11-C
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#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인 부분은 출력하지 않아야 한다
--> 입출력 형식 맞춰주기 위함
Author And Source
이 문제에 관하여(BOJ 2448 : 별찍기 11 - C++), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@neity16/BOJ-2448-별찍기-11-C저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)