뭐라도 쓰겠지
25.03.07 / 삼각수를 이용해 중첩 반복문 없이 피라미드 출력하기 본문
과제로 받은 내용이다. 총 출력해야 되는 횟수가 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번째 줄까지 출력한다.
알고보니까 쉬운데 왜 생각이 안났을까.
'프로그래밍 > C' 카테고리의 다른 글
| 25.03.11 / 배열 (0) | 2025.03.11 |
|---|---|
| 25.03.10 / 메모리의 동적 할당 (0) | 2025.03.10 |
| 25.03.07-25.03.11 / 중첩 반복문을 사용한 피라미드 (0) | 2025.03.07 |
| 25.03.06 / 비트 플래그를 이용한 퀘스트 클리어 여부 확인 (0) | 2025.03.06 |
| 25.03.06 / 비트 연산자를 이용한 2진법 출력 (0) | 2025.03.06 |