Algorithm/📖Baekjoon
#10994 별 찍기 - 19
yewoneeee
2022. 6. 17. 17:57
# 문제
# 입력 및 출력
# 풀이
출력되는 별 사각형의 크기는 길이가 1부터 4씩 커지는 사각형임
정사각형의 변을 구해주고 재귀로 빈칸 자리를 확인해줌
크기가 k일 때부터 확인해서 1이 될 때까지 빈칸 자리를 확인해줌
아래 코드의 재귀함수의 조건문이 좀 복잡한데
첫 번째부터 네 번째까지 반복문은 i, j 값으로 빈칸을 확인하는 조건문임
n=3으로 가정하고 설명해보자
처음에 n=3 일 때 빈칸을 확인하고 그다음 n=2 일 때 빈칸을 확인해주면 됨
n=3 : (i, j) 값이 (1, 1~7), (7, 1~7), (1~7, 1), (1~7, 7) 일 때 빈칸이 됨
n=2 : (i, j) 값이 (3, 3~5), (5, 3~5), (3~5, 3), (3~5, 5) 일 때 빈칸이 됨
그 외엔 전부 * 출력
이것을 전부 조건문으로 나타내면 아래와 같음
n=4일 땐 n=4 빈칸 확인 후 n=3 빈칸 확인하고 그다음으로 n=2 빈칸 확인하면 됨
이것을 재귀적으로 처리해주는 것임
#include <iostream>
using namespace std;
void rec(int i, int j, int k, int s) {
if (i == s && j >= s && j <= s + k - 3) cout << " ";
else if (i >= s && i <= s + k - 3 && j == s) cout << " ";
else if (i == s + k - 3 && j >= s && j <= s + k - 3) cout << " ";
else if (i >= s && i <= s + k - 3 && j == s + k - 3) cout << " ";
else if (k != 1) rec(i, j, k - 4, s + 2);
else cout << "*";
}
int main() {
int n, k = 1;
cin >> n;
for (int i = 1; i < n; i++) k += 4;
for (int i = 0; i < k; i++) {
for (int j = 0; j < k; j++) {
rec(i, j, k, 1);
}
cout << "\n";
}
}
전에 풀었던 별찍기 문제에 기반해서 이번에는 검색 도움 없이 풀어봤다^~^vv
빈칸 조건문 찾기가 진짜 힘들었다,,ㅋㅋㅋ
재귀 많이 풉시당,,