🔻 C언어
#include <stdio.h>
#include <math.h>
void kanto(int n)
{
int num = pow(3, n - 1);
if (n == 0)
{
printf("-");
return;
}
kanto(n - 1);
for (int i = 0; i < num; i++)
{
printf(" ");
}
kanto(n - 1);
}
int main()
{
int n;
while (scanf("%d", &n)!=EOF)
{
kanto(n);
printf("\n");
}
return 0;
}
N일때 출력 값이 N-1을 두번 반복한 것이라는 규칙성을 파악하면 풀리는 코드이다.
N = 2
이면,
--------- 으로 시작하여서,
--- ---
- - - - 이 출력이 된다.
N = 1
이면,
--- 으로 시작하여서,
- - 으로 출력이 된다.
➡️ 위의 예시를 보면, N=2일때는 N=1일때 + 3^(n-1)만큼 공백출력 + N=1일때의 결과가 나오는 것을 알 수 있다.
그래서,
kanto(n - 1);
for (int i = 0; i < num; i++)
{
printf(" ");
}
kanto(n - 1);
코드가 나오게 된다. (여기서 num = pow(3, n-1) 이다)
EOF
의 의미?EOF는 End of File
의 약자로, 파일의 끝을 나타내는 상수이다. 이 값은 일반적으로 파일에서 읽을 데이터가 더 이상 없음을 나타내기 위해 사용된다.
하지만 scanf 함수에서 EOF는 파일의 끝이 아니라 입력 스트림에서 더 이상 읽을 수 있는 데이터가 없음을 나타내는 값!
따라서 scanf("%d", &n) != EOF
는 입력 스트림에서 더 이상 읽을 수 있는 데이터가 없을 때까지 n을 입력 받는 것을 반복하는 것을 의미한다. 여기서 EOF를 작성하지 않으면 무한하게 입력을 받게 되므로 출력초과가 뜬다..