Contents
문제 풀기
문제 풀기
class Solution {
public String solution(String str1, String str2) {
int n = str1.length();
StringBuilder sb = new StringBuilder(n*2);
for (int i = 0; i < n; i++) {
sb.append(str1.charAt(i)).append(str2.charAt(i));
}
return sb.toString();
}
}
int n = str1.length();
str1
길이를 n으로 저장
StringBuilder sb = new StringBuilder(n * 2);
str1
,str2
의 길이가 같으므로n * 2
for (int i = 0; i < n; i++) { sb.append(str1.charAt(i)).append(str2.charAt(i)); }
- 0부터 n-1까지 돌며 두 문자열의 같은 인덱스 문자들을 번갈아 append
StringBuilder
StringBuilder
는 문자열을 수정 가능하게 다루는 자바 클래스String
은 불변(immutable)이라 +=
할 때마다 새 문자열을 매번 만들지만, StringBuilder
는 내부 버퍼에 덧붙이기/삽입/삭제를 해도 같은 객체 안에서 처리해 성능이 좋다- 목적: 반복적인 문자열 결합을 빠르게 (루프에서
+=
대신 사용)
- 가변성: 내용이 바뀜(append/insert/delete 가능).
- 성능: 덧붙일 때 재할당을 최소화해서 대체로 O(n).
String
에+=
를 많이 쓰면 O(n²) 되기 쉽다.
- 스레드 안전성:
StringBuilder
는 스레드 안전 아님(빠름). 스레드 안전이 필요하면StringBuffer
사용(느림).
- 용량(capacity): 내부 문자 배열 크기. 넘치면 자동으로 키우면서 복사함 → 그래서 예상 길이를 알면 미리 capacity 지정하면 더 빠름
자주 쓰는 메서드
append(x)
: 뒤에 붙이기
insert(idx, x)
: 중간 삽입
delete(start, end)
,deleteCharAt(i)
: 삭제
setCharAt(i, ch)
,replace(s,e,str)
toString()
: 최종 문자열 꺼내기
Share article