Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

뭐라도 쓰겠지

25.03.07 / 삼각수를 이용해 중첩 반복문 없이 피라미드 출력하기 본문

프로그래밍/C

25.03.07 / 삼각수를 이용해 중첩 반복문 없이 피라미드 출력하기

김데피 2025. 3. 7. 20:15

과제로 받은 내용이다. 총 출력해야 되는 횟수가 n번째 삼각수인건 금방 떠올렸는데 어떻게 해야 사이에 줄바꿈을 넣을 수 있을지 고민했다. 비트 연산자를 쓰려는 생각도 해봤고 if문으로 특정번째에 * 대신 줄바꿈을 넣는 코드를 짜려고 했는데 실패했다. 아쉬운 채로 집에 가는 버스를 타는데 갑자기 번뜩 n번째 줄은 *을 n번 출력하고 줄바꿈을 하면 된다는 사실을 깨달았다. 

void OneLoopPyramid(int n) {
    int line = 1, count = 0;
    
    for (int i = 1; i <= n * (n + 1) / 2; i++) { // n * (n + 1) / 2 = n번째 삼각수를 구하는 방법
        printf("*");
        count++;

        if (count == line) {
            printf("\n");
            line++;
            count = 0;
        }
    }
}

출력값
*
**
***
****
*****

line과 count를 밖에서 선언한 이유는 for문 안에서 선언하면 한 번 돌아갈 때마다 계속 초기화가 되기 때문에 밖으로 꺼냈다.

 

0번째 줄은 없기 때문에 line은 1에서 시작하고 count는 n번째 줄의 별의 개수를 세는 변수라 0부터 시작한다.

1번째 줄은 *를 하나 출력하고 count++ 된다. 그럼 if문이 참이 되어 줄바꿈을 출력하고 line++하고 count를 0으로 다시 초기화한다. 이때 i 값은 1.

2번째 줄은 *를 두개 출력하고 count++ 두번, if문이 참이 되어 줄바꿈. 이때 i 값은 2, 3.

 

이런식으로 쭉 반복해서 n번째 줄까지 출력한다.

알고보니까 쉬운데 왜 생각이 안났을까.