예지의 테크 로그포스 (Yeji's Tech Log Force)
[BOJ][C++] 백준 2447 별찍기 -10 본문
머리가 팽팽 돌아가지 않는 것을 자각한 문제다 후...
어디를 공백으로 둘 건가에 초점을 맞추는 게 좋은 것 같다.
어느 좌표들이 공백인지 규칙성을 찾는 것이다.
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 |
Comments