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
반응형