sol: 재귀: 해결하지 못했고, 제일 싫어하는 별찍기 재귀 문제
가로 길이 = 1 -> 5 -> 9 -> 13 = 4(N-1)+1 = 4N - 3
세로 길이 = 1 -> 7 -> 11 -> 15 = 가로 길이 + 2(N != 1)
- 각 시작점에서 아래 과정으로 별을 그려나갑니다.
① 별 1개만 출력하고, return
① 세로 방향으로 별 3개를 연속적으로 그리기
① 왼쪽으로 width만큼 별 그리기
② 아래쪽으로 height만큼 별 그리기
③ 오른쪽으로 width만큼 별 그리기
④ 위로 height - 2 만큼 별 그리기
⑤ 왼쪽으로 별 1개를 그립니다.
이 코드를 수행하지 않아도, 결과물의 형태는 같지만, 문제가 다르게 본다(' ' != '\n)#include <bits/stdc++.h> using namespace std; int N; vector<vector<char>> board(1001, vector<char>(1001, ' ')); void drawStar(int x, int y, int n){ //가로길이 = 4 * N - 3 //세로길이 = 가로길이 + 2(N != 1) int width = 4 * n - 3; int height = width + 2; for(int i = 1; i < width; ++i) board[x][y--] = '*'; for(int i = 1; i < height; ++i) board[x++][y] = '*'; for(int i = 1; i < width; ++i) board[x][y++] = '*'; for(int i = 1; i < height - 2; ++i) board[x--][y] = '*'; board[x][y--] = '*'; board[x][y] = '*'; if(n == 2){ board[x][y-1] = '*'; board[x+1][y-1] = '*'; board[x+2][y-1] = '*'; return; } drawStar(x, y-1, n-1); } int main(){ cin >> N; int width = 4 * N - 3; int height = width + 2; //N == 1일 땐, 따로 처리 if(N == 1){ cout << "*" << '\n'; return 0; } //재귀 시작점 = 최초 너비 - 1 int x = 0, y = 4 * N - 4; drawStar(x, y, N); for(int i = 0; i < height; ++i){ if(i == 1){ cout << '*' << '\n'; continue; } for(int j = 0; j < width; ++j){ cout << board[i][j]; } cout << '\n'; } return 0; }