눈팅하는 게임개발자 블로그
백준 알고리즘 2448 본문
#include#include using namespace std; char is_star[1024 * 3][1024 * 6]; void init(int n) { for (int i = 0; i < n; i++) { memset(&is_star[i][0],' ', (2 * n)); } } int squaring(int n) { int a = 1; for (int i = 0; i < n; i++) { a = a * 3; } return a; } void star_tree(int p1, int p2) { is_star[p1][p2] = '*'; // 0 , 2 is_star[p1 + 1][p2 - 1] = '*'; is_star[p1 + 1][p2 + 1] = '*'; for (int i = 0; i < 5; i++) { is_star[p1 + 2][p2 + i - 2] = '*'; } } void spe_star(int n, int p1, int p2) { int temp1 = n / 2; if (n != 6) { spe_star(temp1, p1 - (n / 4), p2); spe_star(temp1, p1 + (n / 4), p2 - (n / 2)); spe_star(temp1, p1 + (n / 4), p2 + (n / 2)); } else { star_tree(p1 - 2, p2); star_tree(p1 + 1, p2 - 3); star_tree(p1 + 1, p2 + 3); } } void print_tmp(int n) { for (int i = 0; i < n; i++) { for (int k = 0; k < 2 * n - 1; k++) { cout << is_star[i][k]; } cout << "\n"; } } int main() { int n = 0; cin >> n; init(n); if (n == 3) { star_tree(0, 2); } else { spe_star(n, n / 2 - 1, n - 1); } print_tmp(n); // while (1); return 0; }
}
가장 큰 삼각형의 중심위치를 좌표로서 시작점으로 점점 작은 단위의 삼각형으로 퍼져가는 재귀함수를 사용.
1 (가장큰 삼각형) -> 3 (2번째로 큰 삼각형) -> 9 (3번째로 큰 삼각형) ----
가장 작은 단위의 삼각형의 바로 앞단계의 삼각형(높이가 6인 삼각형)에 이를때까지 재귀함수를 반복해서 높이가 6인 삼각형의 중심위치에서 가장 작은 단위의 삼각형의 '*'를 입력해주기 위한 좌표 3개를 인자로 전달해서 가장 작은 단위의 삼각형의 위치를 모두다 입력해준다.
처음 설계시의 방법은 is_star의 배열을 bool타입과 int타입으로 선언했다. 이 방법은 3000*6000개가 넘는 배열을 하나하나 다 읽어줘야 해서 런타임 에러.
char타입으로 바꿔서 직접 ' '문자열과 '*'문자열을 is_star배열에 저장 후 바로 출력해줘서 해결.
'공부한거 > 백준알고리즘' 카테고리의 다른 글
백준 알고리즘 2108 (0) | 2018.01.08 |
---|---|
백준 알고리즘 10989 (0) | 2018.01.05 |
백준 알고리즘 6064 (0) | 2018.01.02 |
백준 알고리즘 2775 (1) | 2017.12.29 |
백준 알고리즘 1316 (0) | 2017.12.27 |