반응형
별찍기 프로그램을 작성하는 프로그래밍 언어를 배울 때, 초기에 자주 나오는 문제입니다.
일반적으로 직각삼각형, 이등변삼각형을 많이 찍습니다. 이 문제들은 피라미드 찍기라는 이름으로도 많이 나옵니다.
조금 더 가면 다이아몬드 형태도 찍을 수 있게 됩니다.
일반적인 별 찍기 문제는 난이도면에서 상당히 낮습니다.
이번 문제는 난이도가 높은 별 찍기에 속합니다. 단순한 반복문 중복으로는 해결하기 어렵습니다.
https://www.acmicpc.net/problem/2447
이 문제를 풀기 위해서 저는 재귀함수를 사용했습니다. 이러한 재귀함수는 프랙탈과 같이 반복된 패턴이 크기만 다르게 찍을 때 자주 사용됩니다.
재귀함수를 사용하기 위해 배열로 캔버스를 만들었고, 그 결과를 출력토록 했습니다.
제가 작성한 소스입니다.
//------------------------------------------------
// baekjoon #2447
// - by Aubrey Choi
// - created at 2019-08-01
//------------------------------------------------
#include <stdio.h>
char pic[2187][2188];
void draw(int r, int c, int n, char s)
{
if(n==1) { pic[r][c]=s?'*':' '; return; }
n/=3;
draw(r, c, n, s&1);
draw(r, c+n, n, s&1);
draw(r, c+2*n, n, s&1);
draw(r+n, c, n, s&1);
draw(r+n, c+n, n, 0);
draw(r+n, c+2*n, n, s&1);
draw(r+2*n, c, n, s&1);
draw(r+2*n, c+n, n, s&1);
draw(r+2*n, c+2*n, n, s&1);
}
int main()
{
int n;
scanf("%d", &n);
draw(0, 0, n, 1);
for(int i = 0; i < n; i++)
puts(pic[i]);
return 0;
}
728x90
'Programming > BOJ' 카테고리의 다른 글
[Python] 백준 #2457 공주님의 정원(탐욕 알고리즘) (2) | 2023.05.08 |
---|---|
[C/C++] 백준 #2448 별 찍기 - 11(재귀 함수) (0) | 2023.05.06 |
[C/C++] 백준 #2437 저울(탐욕 알고리즘) (2) | 2023.05.02 |
[C/C++] 백준 #2436 공약수(수학) (0) | 2023.05.02 |
[C/C++] 백준 #2417 정수 제곱근(수학) (0) | 2023.04.30 |
댓글