-
[백준, 별 찍기]Computer Science/백준 Boj 2023. 11. 6. 16:52
https://www.acmicpc.net/problem/2447
접근법
재귀를 통해서 풀고, 가운데 부분은 별을 그리지 않을 것이므로 재귀를 사용하지 않는다.
N이 3이 되는 순간 별을 그린다.
if (3 == N) { print_star(star, sColumn, eColumn, sRow, eRow); return; }
N != 3이면 3분할 후 3번의 재귀를 호출한다.
i와 j가 1인 경우는 재귀를 호출하지 않는다.
if (i == 1 && j == 1) { }else
size만큼 배열의 수를 0 ~ 2까지 키워가며 가로와 세로의 배열의 재귀를 호출한다.
func_star(star, sColumn + j * Size, sColumn + (j + 1) * Size, sRow + i * Size, sRow + (i + 1) * Size, Size);
코드
#include <iostream> #include <string> #include <vector> using namespace std; void print_star(vector<vector<char>>& star, int sColumn, int eColumn, int sRow, int eRow) { for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { if (i == 1 && j == 1) { } else star[sRow + i][sColumn + j] = '*'; } } } void func_star(vector<vector<char>>& star, int sColumn, int eColumn, int sRow, int eRow, int N) { if (3 == N) { print_star(star, sColumn, eColumn, sRow, eRow); return; } else { int Size = N / 3; for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { if (i == 1 && j == 1) { }else func_star(star, sColumn + j * Size, sColumn + (j + 1) * Size, sRow + i * Size, sRow + (i + 1) * Size, Size); } } } } int main() { int N = 0; cin >> N; vector<vector<char>> star = vector<vector<char>>(N, vector<char>(N, ' ')); func_star(star, 0, N, 0, N, N); for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { cout << star[i][j]; } cout << endl; } return 0; }
'Computer Science > 백준 Boj' 카테고리의 다른 글
[백준, 백트래킹] 연산자 끼워넣기 (0) 2023.11.06 [백준 재귀] 하노이 탑 이동 순서 C++ (복습 필요) (1) 2023.10.28 [백준, DP] 연속합 C++(복습필요) (0) 2023.10.24 [백준 조합] 제출 C++ (0) 2023.10.23 [백준 조합] 팩토리얼 C++ (0) 2023.10.23