[C++] 백준 2448 : 별 찍기 - 11
#include <iostream>
#define MAX 2*(3072)
char stars[MAX/2][MAX];
void star(int n, int x, int y){ // x : 가로, y : 세로
if(n == 3){ // 높이 3
stars[y][x] = '*'; // (0,2)
stars[y+1][x-1] = '*'; // (1,1)
stars[y+1][x+1] = '*'; // (1,3)
stars[y+2][x-2] = '*'; // (2,0)
stars[y+2][x-1] = '*'; // (2,1)
stars[y+2][x] = '*'; // (2,2)
stars[y+2][x+1] = '*'; // (2,3)
stars[y+2][x+2] = '*'; // (2,4)
return;
}
// 재귀
star(n/2, x, y); // 삼각형 높이 반씩 줄어듦
star(n/2, x - n/2, y + n/2); // 왼쪽 삼각형
star(n/2, x + n/2, y + n/2); // 오른쪽 삼각형
}
int main(int argc, char **argv){
int N;
scanf("%d",&N);
// 그냥 찍기 X 2차원 배열 이용
for(int i=0; i<N; i++){ // 초기화 - 세로 길이
for(int j=0; j<N * 2; j++){ // 가로 길이
if(j == N * 2 - 1){
stars[i][j] = '\0'; // 문자열 끝내기 -> "" 대신 ''
} else {
stars[i][j] = ' '; // 공백으로 초기화
}
}
}
star(N, N-1, 0); // 별 찍기 - 줄 수, 삼각형 시작 좌표 넘기기 (위에서부터 0이다)
for(int i=0; i<N; i++){
for(int j=0; j< N * 2 - 1; j++){
printf("%c", stars[i][j]);
}
printf("\n");
}
return 0;
}
오늘의 키포인트
- 첫 골드 문제. 복습 필요. 너무너무 안풀려서 인터넷을 많이 참고하였다.
- 그냥 별을 찍는것이 아니라 모두 배열에 넣는 것이 핵심.
- 별의 시작점을 이용한다.
- 삼각형을 모은 것들이 되풀이 되므로 재귀함수를 호출해야한다.
Author And Source
이 문제에 관하여([C++] 백준 2448 : 별 찍기 - 11), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lamknh/C-백준-2448-별-찍기-11저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)