[C#] 코딩테스트 문제 풀이 중 마주친 핵심 개념 정리

정광훈(Unity_9기)·2026년 2월 6일

TIL (Today I Learned)

목록 보기
101/110

코딩테스트 문제를 풀면서 마주쳤던 논리적 오류와 C#의 문자열 처리 효율성,
그리고 자료형(Type) 관련 이슈들을 정리한 글입니다.

1. 두 문자열 번갈아 합치기 (논리 오류 해결)

문제 상황:
두 문자열(str1, str2)을 번갈아 합칠 때 이중 foreach 문을 사용하면,
내부 반복문이 매번 초기화되어 str2의 첫 글자만 계속 붙는 오류가 발생함.

해결 방법:
두 문자열의 길이가 같으므로, 단일 for 문을 사용하여 같은 인덱스(i)로 동시에 접근해야 함.

// [Bad] 이중 반복문 (논리 오류)
foreach(char c1 in str1) {
    foreach(char c2 in str2) { ... } // 매번 처음부터 다시 돔
}

// [Good] 단일 인덱스 접근
StringBuilder sb = new StringBuilder();
for(int i = 0; i < str1.Length; i++)
{
    sb.Append(str1[i]);
    sb.Append(str2[i]);
}

2. 문자열 연결: += vs StringBuilder

Q. 문자열을 합칠 때 그냥 += 연산자를 써도 되지 않나?

  • += 연산자: C#의 string불변(Immutable) 객체임. +=를 할 때마다 새로운 메모리를 할당하고 기존 값을 복사하므로 성능 저하가 심함 (특히 반복문 안에서).
  • StringBuilder: 가변(Mutable) 객체로, 기존 메모리 공간에서 문자열을 조립하므로 속도가 훨씬 빠름.
  • string.Join: 배열에 담긴 문자열을 합칠 때 가장 간결하고 빠름.
// [권장] 반복문이 많을 때
StringBuilder sb = new StringBuilder();
sb.Append("A");

// [권장] 배열을 합칠 때
string[] arr = { "a", "b", "c" };
string result = string.Join("", arr);

3. 문자열 반복하기 (Python의 * 연산자 대체)

C#에는 문자열 곱하기("A" * 5) 연산자가 없음. 상황에 따라 아래 방법을 사용.

  1. 문자(char) 하나 반복: 생성자 사용 (가장 효율적)
    string str = new string('a', 5); // "aaaaa"
  2. 문자열(string) 반복: StringBuilder나 LINQ 사용
    // StringBuilder로 반복해서 Append 하거나,
    // LINQ 사용: string.Concat(Enumerable.Repeat("abc", 3))

4. StringBuilder 뒤에 .ToString()을 붙이는 이유

StringBuilder는 문자열을 만드는 '도구(공장)'이고, 반환 타입인 string'완성품'임.
자료형이 다르기 때문에 ToString()을 통해 string 타입으로 변환 후 반환해야 함.

5. 자료형(Type) 일치 오류 (int vs StringBuilder)

문제 상황:
StringBuilder 타입으로 선언된 변수에 int 값을 억지로 할당하려고 하여 컴파일 에러 발생.

StringBuilder sb1 = new StringBuilder();
// sb1 = int.Parse("123"); // [Error] StringBuilder 변수에 int를 넣을 수 없음

해결 방법:
C#은 정적 타이핑 언어이므로, 변환된 값은 알맞은 타입의 변수에 따로 저장해야 함.
단순 병합 후 비교라면 문자열 보간이 더 효율적임.

// [Better] 문자열 보간법 사용
int num1 = int.Parse($"{a}{b}");
int num2 = int.Parse($"{b}{a}");
return Math.Max(num1, num2);

0개의 댓글