코딩테스트 피드백

코딩테스트(Lv0) 특정 문자 제거하기 (문자열 처리 함수 피드백)

나는주민 2025. 1. 4. 12:55

해결 방법 : 받은 전체 문자열에서 특정 문자열을 제거하여 다시 수정된 문자열을 출력해야함 .

 

class Solution {
    public String solution(String my_string, String letter) {
        
        String answer = "";
        char my_letter = letter.charAt(0);
        int strLeng = my_string.length();
        for(int i = 0; i < strLeng; i++) {
            
            if(my_string.charAt(i) == my_letter)
               continue;
           answer += my_string.charAt(i);
        }
        return answer;
    }
}

본인이 작성한 코드의 실행 속도가 효율적이지 못한 것 같아 다른 사람들의 풀이과 비교해보자 







해결방법 (1) : 문자열의 replace() 함수를 사용하는 방법 특정문자열 ( letter ) 을 "" 로 바꿔서 사실상 제거해버리는 간단한 로직



해결 방법 (2) : 참고한 chatGPT 에서는 String 을 char 배열로 변환하여 처리한다.

 


해결 방법 (2) 는 본인이 했던 방법이랑 유사한 것 같다 .  

StringBuilder answer = new StringBuilder();
answer.append(c);

이 코드라인에 있는   StringBuilder와 append() 메서드는 생소해서 정리만 해서 남겨봐야겠다.  


 

StringBuilder와 append 요약

1. StringBuilder란?

StringBuilder는 가변 문자열 객체로, 문자열을 효율적으로 수정, 추가, 삭제할 수 있는 Java 클래스입니다.
(위치는 java.lang 패키지에 포함)

  • 문자열 연결이나 수정이 잦을 때 String 대신 사용합니다.
  • 기존 객체를 유지하며 작업하므로 메모리와 성능에서 효율적입니다.

2. StringBuilder의 주요 메서드

  • append(String str): 문자열을 객체의 끝에 추가합니다.
public class AppendExample {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello");
        sb.append(" World");
        System.out.println(sb); // 출력: Hello World
    }
}
  • insert(int offset, String str): 특정 위치에 문자열을 삽입합니다.

public class InsertExample {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello World");
        sb.insert(6, "Java "); // "6"은 삽입 위치
        System.out.println(sb); // 출력: Hello Java World
    }
}

 

  • replace(int start, int end, String str): 특정 구간의 문자열을 대체합니다.
public class ReplaceExample {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello Java World");
        sb.replace(6, 10, "Beautiful"); // "Java"를 "Beautiful"로 대체
        System.out.println(sb); // 출력: Hello Beautiful World
    }
}

 

  • delete(int start, int end): 특정 구간의 문자열을 삭제합니다.
public class DeleteExample {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello Beautiful World");
        sb.delete(6, 16); // "Beautiful" 삭제
        System.out.println(sb); // 출력: Hello World
    }
}

 

  • reverse(): 문자열을 뒤집습니다.
public class ReverseExample {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello World");
        sb.reverse();
        System.out.println(sb); // 출력: dlroW olleH
    }
}
  • toString(): StringBuilder 객체를 문자열(String)로 변환합니다.
public class ToStringExample {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello World");
        String result = sb.toString(); // String으로 변환
        System.out.println(result); // 출력: Hello World
    }
}

 


3. append 메서드

append는 기존 문자열의 끝에 새로운 내용을 이어붙이는 메서드입니다.

사용법

java
코드 복사
StringBuilder sb = new StringBuilder("Hello"); sb.append(" World"); // "Hello World" sb.append('!'); // "Hello World!" sb.append(123); // "Hello World!123"

특징

  • 다양한 데이터 타입(String, char, int, double, 등)을 처리할 수 있습니다.
  • 같은 객체에 추가 작업을 수행하므로 메모리 효율이 높습니다.

4. StringBuilder와 String의 차이점

특징String (불변 객체)StringBuilder (가변 객체)

특성 불변 (Immutable) 가변 (Mutable)
새로운 객체 생성 + 연산 시마다 새 객체 생성 동일 객체에 내용을 추가
성능 느림 (반복 작업 시 비효율적) 빠름 (반복 작업에 적합)
사용 사례 짧은 문자열 조작, 읽기 전용 작업 반복적 연결, 수정, 삭제 작업

5. 예제: 성능 비교

// String 사용
String result = "";
for (int i = 0; i < 5; i++) {
    result += i;  // 새로운 객체 생성
}
System.out.println(result); // 결과: "01234"

// StringBuilder 사용
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5; i++) {
    sb.append(i);  // 동일 객체에 추가
}
System.out.println(sb.toString()); // 결과: "01234"

결론

  • **StringBuilder**는 반복적 문자열 작업(연결, 수정 등)이 필요한 경우 매우 효율적입니다.
  • **append**는 문자열의 끝에 데이터를 추가할 때 가장 많이 사용하는 메서드입니다.
  • 짧고 간단한 문자열 작업에는 String과 +를, 복잡한 작업에는 StringBuilder를 사용하세요!