목차
백준 단계별로 풀어보기
25.08.18
6단계: 심화 1
2444번: 별 찍기 - 7
문제 링크 : https://www.acmicpc.net/problem/2444
문제를 풀기 위해 필요한 것
- 별이 찍히는 패턴 분석
: 주어지는 입력값을 'N'이라고 하자.
- 전체 행의 개수는 (N * 2 - 1)개이다.
- 첫 행에서 공백의 개수는 (N - 1)개이며, 다음 행으로 내려갈수록 개수가 1개씩 줄어들다가 (N + 1)번째 행부터 다시 1개씩 늘어난다.
- 첫 행에서 별의 개수는 1개이며, 다음 행으로 내려갈수록 개수가 2개씩 늘어나다가 (N + 1)번째 행부터 다시 2개씩 줄어든다.
- 이를 구현하기 위한 생각
- 전체 행의 개수만큼 반복해야하는데, 첫 시작을 1부터 시작하도록 --> for (int i = 1; i < count * 2; i++)
- N번째 행을 기준으로 대칭을 이룬다. --> 조건문으로 (i <= N)과 (i > N)을 나눠서 생각
- 첫 행에서 공백의 개수가 (N - 1)개이고 행을 내려갈수록 공백이 한 개씩 줄어드는 것은 (N - i)로 표현 가능하다. 그리고 반대로 N번째 행 이후로 공백이 한 개씩 늘어나는 것은 (i - N)으로 표현 가능하다.
- 별의 개수는 첫 행에 하나, 그 뒤로 2개씩 늘어난다. --> (i * 2 - 1)
- 별의 개수는 N번째 행 이후로 2개씩 줄어든다.
- 이 부분이 가장 어려웠는데, 아래쪽 삼각형에서 행 번호 i를 그대로 쓰면 별 개수가 커지기 때문에 전체 높이 (N * 2)에서 i를 빼서 역방향 줄 번호를 얻는다. --> (N * 2 - i)
- 위쪽 삼각형에서 했듯이 홀수 개수를 만들기 위해 (* 2 - 1)을 붙여준다. --> (N * 2 - i) * 2 - 1

정답 코드
using System.Text;
class Backjoon
{
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
int count = int.Parse(Console.ReadLine());
for (int i = 1; i < count * 2; i++)
{
if (i <= count)
{
for (int j = 0; j < count - i; j++)
{
sb.Append(" ");
}
}
else
{
for (int j = 0; j < i - count; j++)
{
sb.Append(" ");
}
}
if (i <= count)
{
for (int j = 0; j < i * 2 - 1; j++)
{
sb.Append("*");
}
}
else
{
for (int j = 0; j < (count * 2 - i) * 2 - 1; j++)
{
sb.Append("*");
}
}
sb.AppendLine();
}
Console.Write(sb.ToString());
}
}'Development > Baekjoon' 카테고리의 다른 글
| [C#] 1157번: 단어 공부 (0) | 2025.08.20 |
|---|---|
| [C#] 10988번: 팰린드롬인지 확인하기 (0) | 2025.08.19 |
| [C#] 3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰 (1) | 2025.08.18 |
| [C#] 25083번: 새싹 (0) | 2025.08.16 |
| [C#] 11718번: 그대로 출력하기 (2) | 2025.08.15 |