Skip to main content

Java 코딩 테스트: StringBuilder 활용 사례 모음


1. 왜 StringBuilder를 쓸까?

코딩 테스트에서 문자열을 다룰 때는 String보다 StringBuilderStringBuffer를 활용하는 것이 성능 면에서 매우 유리하다.

1.1 String은 불변 (immutable)

  • String str = "a"; str += "b"; 는 사실상 매번 새로운 객체를 생성합니다.
  • 반복 연결 시 매우 비효율적 → O(n^2) 시간복잡도 발생 가능

1.2 StringBuilder는 가변 (mutable)

  • 내부 char[] 버퍼를 직접 수정
  • 반복적으로 append해도 객체 1개로 해결 → 훨씬 빠름

📌 참고: StringBuildersynchronized아닌 대신 더 빠르다. 멀티스레드가 아니면 StringBuffer보다 성능상 유리하다.


2. 자주 나오는 활용 패턴

2.1 문자열 뒤집기 (문제 유형: 팰린드롬 판단, 좌우 비교)

String str = "hello";
String reversed = new StringBuilder(str).reverse().toString();
System.out.println(reversed);  // 출력: "olleh"
  • 빠르게 문자열을 뒤집는 가장 간단한 방법
  • 팰린드롬 문제에서 str.equals(reversed)로 비교

2.2 대량 문자열 이어붙이기 (문제 유형: 문자열 압축, 변환 등)

StringBuilder sb = new StringBuilder();
for (char c : arr) {
    sb.append(Character.toUpperCase(c)).append(", ");
}
String result = sb.toString();
  • 루프 안에서 문자열을 누적할 때 + 대신 append() 사용
  • String으로 누적하면 매번 새로운 객체가 생김 → 성능 저하

2.3 조건에 따라 문자열 조립 (문제 유형: 포맷팅, 규칙 변환)

StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 5; i++) {
    sb.append("[").append(i).append("]");
    if (i < 5) sb.append("-");
}
System.out.println(sb.toString());  // 출력: [1]-[2]-[3]-[4]-[5]
  • 특정 규칙을 가진 문자열을 만들어야 할 때
  • 공백, 구분자, 특수문자 등을 유동적으로 넣기 좋음

2.4 문자열 일부 제거 (문제 유형: 특정 문자 제거, 구간 삭제)

StringBuilder sb = new StringBuilder("abcdef");
sb.delete(2, 4);  // 인덱스 2~3 삭제 → "abef"
System.out.println(sb);
  • 특정 구간 제거, 문자 삭제 등 깔끔하게 가능
  • 문자열 슬라이싱처럼 사용할 수 있음

3. 코딩 테스트 팁

상황

추천 도구

이유

문자열을 자주 수정/누적할 때

StringBuilder

가변 객체, 빠른 속도

문자열을 뒤집을 때

StringBuilder.reverse()

메서드 하나로 간단 처리

멀티스레드 고려 필요 없음

StringBuilder

동기화 없음 → 더 빠름

🧠 참고: 코테에서 StringBuilder를 쓰는 것이 대부분 OK, StringBuffer는 멀티스레드 환경에서만 고려


✅ 마무리 요약

  • 문자열 반복 조작 문제에는 절대 String +="..." 쓰지 말기!
  • 대신 StringBuilder로 누적하자
  • .append(), .delete(), .insert(), .reverse()다양한 메서드를 적재적소에 활용

코테에서 성능이 중요한 대형 문자열 문제에서는 StringBuilder는 최고의 무기