# 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` 가변 객체, 빠른 속도
문자열을 뒤집을 때 `StringBuilder.reverse()` 메서드 하나로 간단 처리
멀티스레드 고려 필요 없음 `StringBuilder` 동기화 없음 → 더 빠름
🧠 참고: 코테에서 `StringBuilder`를 쓰는 것이 대부분 OK, `StringBuffer`는 멀티스레드 환경에서만 고려 --- ## ✅ 마무리 요약 - 문자열 반복 조작 문제에는 ****절대** `String +="..."` **쓰지 말기!**** - 대신 `StringBuilder`로 누적하자 - `.append()`, `.delete()`, `.insert()`, `.reverse()`****다양한 메서드****를 적재적소에 활용 > 코테에서 성능이 중요한 대형 문자열 문제에서는 `StringBuilder`는 최고의 무기 ---