inblog logo
|
parangdajavous
    Coding Test_Java

    [Coding Test_Java] 11. 문자열 섞기

    김미숙's avatar
    김미숙
    Aug 12, 2025
    [Coding Test_Java] 11. 문자열 섞기
    Contents
    문제 풀기
    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
    Contents
    문제 풀기

    parangdajavous

    RSS·Powered by Inblog