[백준 2448번 C/C++] 별 찍기 - 11
[백준 2448번 C/C++] 별 찍기 - 11
https://www.acmicpc.net/problem/2448
해결전략
Recursion, 재귀
fractal, 프랙탈 삼각형
정답 코드
#include <iostream>
#include <vector>
using namespace std;
int n;
vector<vector<char>> v;
char blank = ' ';
char star = '*';
void Tree(int y, int x) // 별 그리기, (y, x)는 별의 꼭짓점 위치
{
// 첫번째 줄 (꼭직점에 * 1개)
v[y][x] = star;
// 두번째 줄 (* 2개)
v[y + 1][x - 1] = v[y + 1][x + 1] = star;
// 세번째 줄 (* 5개)
v[y + 2][x - 2] = v[y + 2][x - 1] = v[y + 2][x] = v[y + 2][x + 1] = v[y + 2][x + 2] = star;
return;
}
void Cal(int y, int x, int n)
{
if (n == 3) {
Tree(y, x); // n이 3이면 가장 작은 삼각형 별을 그림
return;
}
// 현재 삼각형을 3개의 작은 삼각형으로 나누어 각각에 대해 별을 그림
Cal(y, x, n / 2); // 위쪽 삼각형
Cal(y + n / 2, x - n / 2, n / 2); // 왼쪽 아래 삼각형
Cal(y + n / 2, x + n / 2, n / 2); // 오른쪽 아래 삼각형
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n;
v.resize(n, vector<char>(n*2 - 1, ' '));
Cal(0, n - 1, n); // 별을 그리는 함수 호출
// 별 출력
for (int y = 0; y < n; y++) {
for (int x = 0; x < n*2 - 1; x++) {
cout << v[y][x];
}
cout << "\n";
}
return 0;
}
가로를 n * 2로 설정하고 출력하면 안 된다.
가로를 정확히 n * 2 - 1로 해야 불필요한 빈칸이 출력되지 않아 정답이 된다.
'⭐ 코딩테스트 > 백준' 카테고리의 다른 글
[백준 2467번 C/C++] 용액 (0) | 2024.01.12 |
---|---|
[백준 1987번 C/C++] 알파벳 (0) | 2024.01.10 |
[백준 12851번 C/C++] 숨바꼭질2 (0) | 2024.01.08 |
[백준 17144번 C/C++] 미세먼지 안녕! (1) | 2024.01.05 |
[백준 2096번 C/C++] 내려가기 (1) | 2024.01.04 |
댓글
이 글 공유하기
다른 글
-
[백준 2467번 C/C++] 용액
[백준 2467번 C/C++] 용액
2024.01.12 -
[백준 1987번 C/C++] 알파벳
[백준 1987번 C/C++] 알파벳
2024.01.10 -
[백준 12851번 C/C++] 숨바꼭질2
[백준 12851번 C/C++] 숨바꼭질2
2024.01.08 -
[백준 17144번 C/C++] 미세먼지 안녕!
[백준 17144번 C/C++] 미세먼지 안녕!
2024.01.05