[boj] (s1) 2447 별 찍기 - 10
재귀적인 패턴을 재귀함수로 찍는 문제
먼저, 좌표(i, j)에 따른 규칙을 알아보자
N=9 일때
빈칸 :
(1,1) (1,4) (1,7) -> i%3==1 && j%3==1
(3,3) (3,4) (3,5) -> /3 -> 모두 (1,1) -> i%3==1 && j%3==1
(4,3) (4,4) (4,5) -> /3 -> 모두 (1,1) -> i%3==1 && j%3==1
(5,3) (5,4) (5,5) -> /3 -> 모두 (1,1) -> i%3==1 && j%3==1
(7,1) (7,4) (7,7) -> i%3==1 && j%3==1
#include <iostream>
using namespace std;
void print(int i, int j, int n)
{
if ((i / n) % 3 == 1 && (j / n) % 3 == 1) // 빈칸 조건
{
cout << " ";
}
else // 빈칸 조건 아닐 때
{
if (n == 1)
{
cout << "*";
}
else
{
print(i, j, n / 3);
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
cin >> N;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
print(i, j, N);
}
cout << '\n';
}
return 0;
}
참고로
N/3의 패턴으로 둘러쌓이게 하기 위해 n==1 일때만 *을 찍어줘야한다.
Author And Source
이 문제에 관하여([boj] (s1) 2447 별 찍기 - 10), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@peanut_/boj-s1-2447-별-찍기-10저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)