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#
내 답안 · 자동 저장

작성 후 위 해설 보기에서 모범 해설과 대조하세요.