-
[BOJ][C++] 백준 2447 별찍기 -10CS/Algorithm & Data Structure 2022. 11. 22. 15:21
머리가 팽팽 돌아가지 않는 것을 자각한 문제다 후...
어디를 공백으로 둘 건가에 초점을 맞추는 게 좋은 것 같다.
어느 좌표들이 공백인지 규칙성을 찾는 것이다.
9*9그림을 그려보면 (1,1),(1,4),(1,7),(4,1),(4,4),(4,7) 처럼
x좌표%3==1 && y좌표%3==1
인 곳들이 공백이었다.
더 나아가 큰 패턴으로 보았을 때, 패턴상의 가운데 부분이 비게 되고 이 부분을 생각해보면
x좌표/(n/3) % 3 ==1 && y좌표/(n/3) % 3 == 1
인 곳들이 공백이었다.
1,1~n,n각 좌표를 반복문으로 방문할 거고 공백부분을 위의 규칙으로 비워줄거다.
이걸 n을 계속 쪼개줘가면서 3*3패턴까지 반복 그리게 할 것이고, 그 후에 또 재귀함수가 한번 더 쪼개면 n==1이 되므로
더 이상 찾을 공백이 없다. ==> "*"을 찍어준다.
#include <iostream> using namespace std; void star(int i, int j, int N) { if (N == 1) { cout << "*"; } else if (i / (N / 3) % 3 == 1 && j / (N / 3) % 3 == 1) { //공백 체크 cout << " "; } else { star(i, j, N / 3); } } int main() { int N; cin >> N; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { star(i, j, N); } cout << "\n"; } }
'CS > Algorithm & Data Structure' 카테고리의 다른 글
[BOJ][C++] 백준 2231 분해합 (0) 2022.11.22 [BOJ][C++] 백준 2798 블랙잭 (0) 2022.11.22 [BOJ][C++] 백준 11729 하노이의 탑 이동순서 (0) 2022.11.22 [BOJ][C++] 백준 10870 피보나치 수 5 (0) 2022.11.22 [BOJ][C++] 백준 10872 팩토리얼 (0) 2022.11.22