Java 코딩 테스트: StringBuilder 활용 사례 모음
1. 왜 StringBuilder
를 쓸까?
코딩 테스트에서 문자열을 다룰 때는 String
보다 StringBuilder
나 StringBuffer
를 활용하는 것이 성능 면에서 매우 유리하다.
1.1 String
은 불변 (immutable)
String str = "a"; str += "b";
는 사실상 매번 새로운 객체를 생성합니다.- 반복 연결 시 매우 비효율적 →
O(n^2)
시간복잡도 발생 가능
1.2 StringBuilder
는 가변 (mutable)
- 내부
char[]
버퍼를 직접 수정 - 반복적으로 append해도 객체 1개로 해결 → 훨씬 빠름
📌 참고: StringBuilder
는 synchronized
가 아닌 대신 더 빠르다. 멀티스레드가 아니면 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
를 쓰는 것이 대부분 OK, StringBuffer
는 멀티스레드 환경에서만 고려
✅ 마무리 요약
- 문자열 반복 조작 문제에는 절대
String +="..."
쓰지 말기! - 대신
StringBuilder
로 누적하자 .append()
,.delete()
,.insert()
,.reverse()
등 다양한 메서드를 적재적소에 활용
코테에서 성능이 중요한 대형 문자열 문제에서는
StringBuilder
는 최고의 무기