*
**
***
****
*****
위와 같이 첫째 줄부터 N번째 줄까지 오른쪽을 기준으로 정렬한 별을 출력하는 문제이다.
문자열끼리 연결하는 작업 시에는 내부적으로 여러 작업이 발생하고, 기존 문자열 값의 길이에 추가된 문자열의 크기를 더한 크기의 새로운 문자열이 생성된다. 즉, string 객체끼리 더하는 방법은 메모리 할당과 해제를 발생시키므로 덧셈 연산이 많아진다면 성능적으로 좋지 않다.
string은 변경 불가능한 문자열을 생성하지만 StringBuilder는 변경 가능한 문자열을 만들어 주므로 새로운 문자열을 만들지 않아 비교적 성능이 좋다.
그래서 StringBuilder 로 문자열을 연결하는 연산을 구현하였다.
using System;
using System.Text;
namespace BJ_2439{
class Program{
static void Main(string[] arg){
int n = int.Parse(Console.ReadLine());
for (int i = 1; i <= n; i++){
StringBuilder sb_star = new StringBuilder();
for (int j = 0; j < n - i; j++)
sb_star.Append(" ");
sb_star.Append(new string('*', i));
Console.WriteLine(sb_star);
}
}
}
}
반복문을 하나만 사용해 구현했다. string 객체를 생성과 동시에 초기화하였다. 공백 문자열과 별 문자열을 연결하는 연산을 수행하지만 반복 횟수가 적으므로 string끼리 더하는 연산을 해도 성능이 낮지 않다.
using System;
using System.Text;
namespace BJ_2439{
class Program{
static void Main(string[] arg){
int n = int.Parse(Console.ReadLine());
for (int i = 1; i <= n; i++)
Console.WriteLine(new string(' ', n - i) + new string('*', i));
}
}
}
StringBuilder https://onlyfor-me-blog.tistory.com/317