-
[백준/BOJ] 10994번 별 찍기 - 19 (C++)알고리즘 문제풀이/백준 2020. 12. 11. 13:42
재귀를 이용하는 별 찍기 문제입니다.
각각의 패턴마다 양 옆, 위 아래의 *의 개수가 1, 5, 9, 13 ... 으로 증가하는 규칙을 가집니다. 이를 통해 4n - 3 이라는 점화식을 얻어낼 수 있습니다. 또한 각 패턴마다 '*'이 시작되는 지점은 2씩 차이가 납니다. 2차원 배열을 선언 후 ' '로 초기화하고, 위의 규칙을 이용해 재귀적으로 '*'을 채워갈 수 있습니다.#include <iostream> using namespace std; char map[401][401]; void R(int x, int y, int n) { if(n == 1) { map[x][y] = '*'; return; } else { // 각 패턴의 위, 아래 int len = 4*n - 3; for(int j = y; j < y + len; j++) { map[x][j] = '*'; map[x + len - 1][j] = '*'; } // 각 패턴의 양 옆 for(int i = x; i < x + len; i++) { map[i][y] = '*'; map[i][y + len - 1] = '*'; } // 재귀 R(x + 2, y + 2, n - 1); } } int main(void) { ios_base::sync_with_stdio(false); cin.tie(0); int n; cin>>n; // map을 전부 ' '로 초기화 for(int i = 0; i < 4*n - 3; i++) { for(int j = 0; j < 4*n - 3; j++) { map[i][j] = ' '; } } R(0, 0, n); // xy좌표, 패턴의 수 // 출력 for(int i = 0; i < 4*n - 3; i++) { for(int j = 0; j < 4*n - 3; j++) { cout<<map[i][j]; } cout<<"\n"; } }
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준/BOJ] 1049번 기타줄 (C++) (0) 2020.12.12 [백준/BOJ] 3085번 사탕 게임 (C++) (0) 2020.12.11 [백준/BOJ] 2448번 별 찍기 - 11 (C++) (0) 2020.12.11 [백준/BOJ] 14501번 퇴사 (C++) (0) 2020.12.10 [백준/BOJ] 5430번 AC (C++) (0) 2020.12.09