[Coding Test_Java] 11. 문자열 섞기

김미숙's avatar
Aug 12, 2025
[Coding Test_Java] 11. 문자열 섞기
notion image

문제 풀기

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(); } }
 
  1. int n = str1.length();
    1. str1 길이를 n으로 저장
  1. StringBuilder sb = new StringBuilder(n * 2);
    1. str1, str2의 길이가 같으므로 n * 2
  1. for (int i = 0; i < n; i++) { sb.append(str1.charAt(i)).append(str2.charAt(i)); }
    1. 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

parangdajavous