https://www.acmicpc.net/problem/2447
1. 2차원배열 fill 방법
//2차원 배열 초기화 방법
for (int i = 0; i < n; ++i) {
fill(a[i], a[i] + n, ' ');
}
#include <bits/stdc++.h>
using namespace std;
int n;
char a[2500][2500];
//함수정의 : n만큼의 범위에 *-' ' 채워넣기 , 시작좌표
void go(int n, int y, int x) {
//기저사례는 최대한 간단히(원소1개만 처리할정도로)
if (n==1) {
a[y][x] = '*';
return;
}
//재귀식
//9칸으로 나눈후 각각칸의 시작좌표를 구했음.
//단, 중앙인경우는 pass(빈칸)
//ex)!가 시작좌표임.
// (0,0) (0,3) (0,6) == (y,x) (y,x+n/3*1) (y,x+n/3*2)
//! * * ! * * ! * *
//*
//*
//...
int num = n / 3;
go(num, y, x);
go(num, y, x+num*1);
go(num, y, x+num*2);
go(num, y+ num * 1, x);
//go(num, y+num*1, x+num*1); pass(공백)
go(num, y+ num * 1, x+ num * 2);
go(num, y+ num * 2, x);
go(num, y+ num * 2, x+ num * 1);
go(num, y+ num * 2, x+ num * 2);
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n;
//2차원 배열 초기화 방법
for (int i = 0; i < n; ++i) {
fill(a[i], a[i] + n, ' ');
}
go(n, 0, 0);
for (int i = 0; i < n; ++i) {
cout << a[i] << "\n";
}
}
'Algorithm > recursion' 카테고리의 다른 글
리트코드 70 계단오르기 c++ // 재귀함수 리턴값 전파 이해, dp (0) | 2024.05.19 |
---|---|
백준 2448 별찍기-11 c++ // 재귀함수, 분할정복법 (0) | 2023.09.30 |
백준 1992 쿼드트리 c++ // 재귀함수, 재귀시작-끝에 괄호추가하는방법 (0) | 2023.09.26 |
백준 2630 색종이 만들기 c++ // 재귀함수 , 일반식만들기 (0) | 2023.09.26 |
백준 1780 종이의 개수 c++ // 재귀함수, 일반식도출 (0) | 2023.09.26 |