반응형
출처: www.acmicpc.net/problem/10994
Input
3
Output
*********
* *
* ***** *
* * * *
* * * * *
* * * *
* ***** *
* *
*********
별들이 그려지는 규칙을 파악하여 구현하는 문제.
Input data의 변화를 보면 쉽게 규칙을 확인할 수 있습니다.
n ≥ 2인 경우 『*』 로 □ 형태로 둘러 싸인것을 확인할 수 있습니다.
바깥쪽 테두리부터 안쪽 테두리까지 재귀적으로 별을 그려나갑니다.
[n = 3]
- 각 테두리의 길이 len = 4 * (n - 1) + 1;
- 좌측 상단 지점을 (x, y)를 기준점 설정
① n = 3일 때, (0, 0)에서 길이 9의 테두리를 가집니다.
len = 4 * (3 - 1) + 1 = 9
② n = 2일 때, (2, 2)에서 길이 5의 테두리를 가집니다.
len = 4 * (2 - 1) + 1 = 5
③ n = 1일 때, (4, 4)에서 별을 그리고 return
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
char map[500][500];
void drawStar(int n, int x, int y) {
if (n == 1) {
map[x][y] = '*';
return;
}
int len = 4 * (n - 1) + 1;
// 위, 아래 가로선
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] = '*';
}
// n을 줄여가면 재귀적으로 수행
drawStar(n - 1, x + 2, y + 2);
return;
}
int main(void) {
int n;
cin >> n;
// 공백으로 초기화
for (int i = 0; i < 4 * (n - 1) + 1; i++) {
for (int j = 0; j < 4 * (n - 1) + 1; j++) {
map[i][j] = ' ';
}
}
drawStar(n, 0, 0);
// 출력
for (int i = 0; i < 4 * (n - 1) + 1; i++) {
for (int j = 0; j < 4 * (n - 1) + 1; j++) {
cout << map[i][j];
}
cout << '\n';
}
return 0;
}
반응형
'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글
[BOJ] 백준 10993 별 찍기 - 18 (0) | 2021.02.26 |
---|---|
[BOJ] 백준 10997 별 찍기 - 22 (0) | 2021.02.26 |
[BOJ] 백준 1405 미친 로봇 (0) | 2021.02.26 |
[BOJ] 백준 1063 킹 (0) | 2021.02.26 |
[BOJ] 백준 3985 롤 케이크 (0) | 2021.02.26 |
댓글