알고리즘 스터디(3) - 4779번: 칸토어 집합

Song Chae Won·2023년 3월 28일
0

알고리즘

목록 보기
4/10
post-thumbnail

🤍 실버3 - 4779번: 칸토어 집합

🔻 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를 작성하지 않으면 무한하게 입력을 받게 되므로 출력초과가 뜬다..

profile
@chhaewxn

0개의 댓글