51. StringBuilder 의 내부 구조와 성장
난이도 중 해설 보기 →
결함을 모두 찾고 원인·수정안·더 나은 설계를 제시하라. 마커
(A)(B) 는 주목 위치 힌트다.
결함 코드 · C#
// ============================================================================
// [언어 내부동작 문제] C# — StringBuilder 의 내부 구조와 성장
// ----------------------------------------------------------------------------
// 주제:
// StringBuilder 는 왜 반복 문자열 결합보다 빠른가? 내부가 어떻게 생겼고,
// Append/Insert/인덱서/ToString 의 비용은 어떠하며, Capacity 는 어떻게 성장하는가를
// 예측하고 설명하라.
//
// 과제:
// 1) 아래 프로그램의 출력을 예측하라.
// 2) StringBuilder 의 내부 자료구조를 설명하고, Append 가 어떻게
// 전체 재할당·복사를 피하는지 서술하라.
// 3) 다음 각 연산의 시간 복잡도를 설명하라: Append(끝에 추가), 중간 Insert,
// 인덱서 sb[i] 접근, ToString().
// 4) 초기 Capacity 설정이 성능/메모리에 주는 영향을 설명하라.
// ============================================================================
using System;
using System.Text;
class Program
{
static void Main()
{
var sb = new StringBuilder();
for (int i = 0; i < 5; i++) sb.Append("ab");
Console.WriteLine(sb.Length);
Console.WriteLine(sb.ToString());
sb.Insert(0, ">>");
Console.WriteLine(sb.ToString());
Console.WriteLine(sb[0]);
}
} 내 리뷰 · C#
내 답안 · 자동 저장
작성 후 위 해설 보기에서 모범 해설과 대조하세요.