C# while·if 별 찍기: 중첩 반복문과 삼각형 출력 원리
C#에서 별표 삼각형을 출력하는 문제는 결과보다 반복문의 역할을 나누는 과정이 핵심이에요. 바깥쪽 while은 현재 행을 관리하고, 안쪽 반복문은 그 행에 필요한 공백과 별표를 출력합니다. if는 현재 행과 열의 관계를 보고 문자를 선택할 때 사용합니다.
높이가 5인 왼쪽 정렬 삼각형의 각 행에는 1개, 2개, 3개, 4개, 5개의 별이 들어갑니다. 따라서 바깥 반복문의 행 번호를 안쪽 반복문의 종료 조건으로 사용하면 돼요.
while문 하나는 무엇을 반복할까요?
while은 조건을 먼저 확인한 뒤 조건이 true인 동안 본문을 반복합니다. 처음부터 조건이 거짓이면 한 번도 실행되지 않아요. 카운터를 쓰는 반복문에서는 초기값, 종료 조건, 증가식 세 가지가 서로 맞아야 합니다. 증가식을 빼먹으면 조건이 계속 참으로 남아 무한 반복이 될 수 있습니다.
int row = 1;
while (row <= 5)
{
Console.WriteLine($"{row}번째 행");
row++;
}
이 코드는 행 번호 1부터 5까지 출력합니다. 조건을 row < 5로 쓰면 4에서 끝나므로, 원하는 횟수와 비교 연산자의 경계를 함께 확인해야 해요.

중첩 while문으로 행과 열을 나눠 보세요
화면에 여러 줄을 그리려면 행 안에서 다시 열을 반복해야 합니다. 바깥 반복문이 한 번 실행될 때마다 안쪽 반복문의 column을 1로 초기화하는 것이 중요해요. 초기화를 바깥에 두면 첫 행을 출력한 뒤 열 값이 남아 다음 행의 안쪽 반복문이 실행되지 않습니다.
int height = 5;
int row = 1;
while (row <= height)
{
int column = 1;
while (column <= row)
{
Console.Write('*');
column++;
}
Console.WriteLine();
row++;
}
row가 3일 때 안쪽 반복문은 column 1, 2, 3에서 실행되므로 별 세 개를 출력합니다. Console.Write는 같은 줄에 이어 쓰고, 안쪽 반복이 끝난 뒤의 Console.WriteLine()이 다음 행으로 이동시켜요.
if문은 어떤 위치에 별을 찍을지 결정합니다
직사각형 영역을 모두 순회하면서 특정 위치에만 별을 찍고 싶다면 if가 유용합니다. 아래 코드는 행 번호보다 열 번호가 작거나 같은 위치에는 별을, 나머지에는 공백을 출력합니다. 반복 횟수는 항상 height × height이고 문자를 조건으로 고르는 방식이에요.
int height = 5;
int row = 1;
while (row <= height)
{
int column = 1;
while (column <= height)
{
if (column <= row)
Console.Write('*');
else
Console.Write(' ');
column++;
}
Console.WriteLine();
row++;
}
이 문제에서는 첫 번째 예제처럼 필요한 별 개수만 반복하는 코드가 더 짧습니다. 하지만 좌표마다 다른 문자를 선택하는 사각형, 테두리, X자 모양으로 확장하려면 두 번째 구조가 이해하기 좋아요. 예를 들어 테두리는 row == 1 || row == height || column == 1 || column == height일 때 별을 출력하면 됩니다.

오른쪽 정렬 삼각형은 공백 수부터 계산하세요
오른쪽 정렬 삼각형의 첫 행에는 height - 1개의 공백과 별 하나가 필요합니다. 현재 행이 row라면 공백은 height - row개, 별은 row개예요. 모양을 먼저 행별 숫자로 적은 다음 반복 조건으로 옮기면 복잡한 조건문을 줄일 수 있습니다.
int height = 5;
int row = 1;
while (row <= height)
{
int spaces = height - row;
int stars = row;
while (spaces-- > 0) Console.Write(' ');
while (stars-- > 0) Console.Write('*');
Console.WriteLine();
row++;
}
별이 하나 부족하거나 무한 반복될 때 확인할 것
- 행과 열의 시작값이 0인지 1인지 한 기준으로 맞췄는지 확인하세요.
<와<=중 원하는 마지막 값을 포함하는 조건인지 확인하세요.- 안쪽 카운터가 매 행마다 초기화되는지, 각 반복문의 증가식이 실행되는지 확인하세요.
WriteLine을 별 출력 안쪽에서 호출하면 별마다 줄이 바뀝니다. 줄바꿈은 한 행이 끝난 뒤에 두세요.- 한 줄짜리 본문도 중괄호를 쓰면 나중에 코드를 추가할 때 범위 실수를 줄일 수 있습니다.
공식 자료
최초 작성: 2015년 1월 6일 · 내용 및 예제 업데이트: 2026년 8월 24일
댓글
댓글 쓰기