[백준 10992] 별 찍기 - 17 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
공백과 별의 개수 규칙을 계산하여 속이 빈 삼각형 모양을 출력하는 구현 문제입니다.
- 정수
N
이 주어졌을 때, 총N
줄에 걸쳐 특정 패턴의 별을 출력해야 합니다. - 첫 줄에는 가운데 정렬된
*
하나를 출력하고, 이후 줄마다 좌우 끝에*
을 출력하며 그 사이를 공백으로 채웁니다. - 마지막 줄에는 별을 공백 없이 연속으로 출력합니다.
접근법
- 줄 번호를
i
라 할 때, 총N
줄을 출력합니다. - 첫
N - 1
줄까지는- 앞쪽에 공백을
N - 1 - i
개 출력 - 좌측
*
을 출력 후 가운데 공백을2 * i - 1
개 출력 - 단,
i > 0
인 경우에만 우측*
출력
- 앞쪽에 공백을
- 마지막 줄(
i = N - 1
)은 별2 * N - 1
개를 공백 없이 출력합니다.
Code
[ C# ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
class Program {
static void Main() {
int n = int.Parse(Console.ReadLine());
for (int i = 0; i < n - 1; i++) {
Console.Write(new string(' ', n - 1 - i));
Console.Write("*");
if (i > 0)
Console.Write(new string(' ', 2 * i - 1) + "*");
Console.WriteLine();
}
Console.WriteLine(new string('*', 2 * n - 1));
}
}
[ C++ ]
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
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int num; cin >> num;
for (int i = 0; i < num - 1; i++) {
for (int j = 0; j < num - 1 - i; j++)
cout << " ";
cout << "*";
for (int j = 0; j < 2 * i - 1; j++)
cout << " ";
if (i != 0) cout << "*";
cout << "\n";
}
for (int i = 0; i < 2 * num - 1; i++)
cout << "*";
cout << "\n";
return 0;
}