C#/백준 알고리즘
2022.01.17 [백준] C# 별 찍기 - 2
ian's coding
2022. 1. 17. 21:50
728x90
반응형
문제
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.
입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
출력
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.
예제 입력 1 복사
5
예제 출력 1 복사
*
**
***
****
*****
아래의 방식으로 처음 코딩을 했는데 통과는 했지만 경과시간이 너무 길었다.. 그래서 다른 사람의 코드를 참고하면서 StringBuilder를 사용하면 경과시간이 짧다는 것을 알게 되었고 2번째의 방식으로 다시 풀어 보았다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
using System;
class AA{
static void Main(){
int n = int.Parse(Console.ReadLine());
for(int i=1;i<=n;i++){
for(int j=1;j<=n-i;j++){
Console.Write(" ");
}
for(int k=0;k<i;k++){
Console.Write("*");
}
Console.WriteLine();
}
}
}
|
ㄴcs |
-처음의 방식으로 하면 for문이 돌때마다 문자열이 계속해서 복사되기 때문에 오래걸리는 반면, StirngBuilder를 사용하게 되면 내부적으로 일정한 양의 메모리를 할당한다. 그리고 Append 했을 때, 그 값이 메모리에 복사된다. 또한 할당된 메모리가 모두 사용했을 때에, 그때 새롭게 여유분의 메모리를 추가로 할당하기 때문에 시간이 짧게 걸린다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
using System;
using System.Text;
class AA{
static void Main(){
int n = int.Parse(Console.ReadLine());
StringBuilder sb = new StringBuilder();
for(int i=0;i<n;i++){
for(int j=i;j<n-1;j++){
sb.Append(" ");
}
for(int k=0;k<=i;k++){
sb.Append("*");
}
sb.Append("\n");
}
Console.Write(sb);
}
}
|
cs |
728x90
반응형