https://www.acmicpc.net/problem/10993
[난이도] Gold4
[유형] 재귀
[풀이]
2차원 배열을 선언한 뒤, 재귀함수로 큰 삼각형부터 그려준다.
공백은 ' '으로 표시해야하며, 더이상 *가 없다면 다음 라인으로 넘어가야
오답을 피할 수 있다.
#include <algorithm>
#include <cstdio>
using namespace std;
bool map[2500][2500];
int N,eg[11];
void prt(int n,int sy,int sx){
if(n==0) return;
int h=eg[n],w=(h-1)*2+1,d=1,ey,ex=sx+w-1;
if(n%2==0) {
ey=sy+h-1;
}else{
d=-1;
ey=sy-h+1;
}
for(int i=sx;i<=ex;i++) map[sy][i] = 1;
int k=1;
for(int y=sy+d;y!=ey+d;y+=d,k++){
map[y][sx+k] = map[y][ex-k] = 1;
}
prt(n-1,(sy+ey)/2,sx+h/2+1);
}
int main(){
scanf("%d",&N);
eg[1]=1;
for(int i=2;i<=N;i++) eg[i]=eg[i-1]*2+1;
int k=0,d=1;
if(N%2) prt(N,eg[N]-1,0);
else {
k=eg[N]-1,d=-1;
prt(N,0,0);
}
for(int i=0;i<eg[N];i++){
for(int j=0;j<eg[N]+k;j++) printf("%c",map[i][j] ? '*':' ');
k+=d;
if(i<eg[N]-1) puts("");
}
}
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/10993.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold4] 1719 : 택배 (C++) (0) | 2020.12.30 |
---|---|
[BOJ/백준][Gold4] 11562 : 백양로 브레이크 (C++) (0) | 2020.12.30 |
[BOJ/백준][Gold4] 7570 : 줄 세우기 (C++) (0) | 2020.12.27 |
[BOJ/백준][Gold4] 11780 : 플로이드2 (C++) (0) | 2020.12.27 |
[BOJ/백준][Gold4] 2157 : 여행 (C++) (0) | 2020.12.27 |