[C언어] 백준 2447 : 별 찍기 - 10
진행 방식
어떻게 진행해야 할 지 몰라서 힌트를 받았다. n = 9라고 하면, 다 *로 채운 뒤 특정 조건에 공백처리하면 된다는 것이다.
*********
* ** ** *
*********
*** ***
* * * *
*** ***
*********
* ** ** *
*********
이처럼 9 x 9 일때, 왼쪽 위 좌표를 0,0이라고 가정하자. 가운데에 뻥 뚫려있는 곳은 일단 내비두고 진행해보자. 그러면 나머지 빈칸은
1,1 4,1 7,1
1,4 공백 7,4
1,7 4,7 7,7
이렇게 나오는데, 규칙성으로 x % 3 == 1 && y % 3 == 1 이면 공백을 넣어주면 된다.
이제 가운데에 뻥 뚫려있는곳의 규칙을 찾아보면, x = 3, 4, 5, y = 3, 4, 5이다. n값을 3으로 나누고(n = 3) 그 n값을 넣어주면 x / n == 1, y / n == 1이라는 규칙이 나온다.
규칙을 다 구했으니 식을 작성하면 된다.
(x % 3 == 1 && y % 3 == 1) || (x / n == 1 && y / n == 1) 그래서 처음엔 이렇게 작성했는데, 코드가 이상하게 돌아가서 구글링을 해보았다.
결국 (x / n) % 3 == 1 && (y / n) % 3 == 1로 해주는 방식을 해주었는데, 코드를 보면서 진행해보자.
#include <stdio.h>
int star(int x, int y, int n)
{
if ((x / n) % 3 == 1 && (y / n) % 3 == 1)
{
printf(" ");
}
else
{
if (n / 3 == 0) // 종료조건
printf("*");
else
{
star(x, y, n / 3); // 재귀
}
}
}
int main()
{
int n, i, j;
scanf("%d", &n);
i = 0;
while (i < n)
{
j = 0;
while (j < n)
{
star(i, j, n);
j++;
}
printf("\n");
i++;
}
}
재귀를 n / 3을 해주면서 진행하여 결국에는 공백을 넣을 수 있게 되었다.
https://hou27.tistory.com/entry/BaekjoonC%EC%96%B8%EC%96%B4-2447%EB%B2%88-%EB%B3%84%EC%B0%8D%EA%B8%B0-10 여기에서 도움을 많이 받았다.
Author And Source
이 문제에 관하여([C언어] 백준 2447 : 별 찍기 - 10), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimmainsain/C언어-백준-2447-별-찍기-10저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)