[JAVA] 문자열 뒤집기 - reverse()

jmjgirl·2023년 8월 11일
2
post-thumbnail

프로그래머스 Lv.0 문자열 뒤집기

프로그래머스 Lv.0 문자열 뒤집기 문제를 푸는 도중 뭔가 더 간단하고 성능이 좋은 방법으로 풀 수 있을것 같은데... 하는 생각에 찾아보게 되었다.

내가 처음 푼 방법은 for문을 이용하여 문자를 반대로 집어넣는 방법이었다.

class Solution {
    public String solution(String my_string) {
        
        for (int i = my_string.length()-1; i >= 0; i--) {
            answer += my_string.charAt(i);
        }
        
        return answer;
    }
}

테스트는 통과하였지만 성능이 너무 떨어졌다 😥
그래서 찾은 방법은 reverse() 메서드를 사용하는 방법이다!


reverse( ) 메서드

reverse( ) : 저장되어 있는 문자열의 순서를 거꾸로 나열하는 메서드다.

StringBuffer 클래스StringBuilder 클래스의 reverse( ) 메서드를 사용하면 간단하게 풀 수 있다

그럼 여기서 StringBuffer 클래스와 StringBuilder 클래스가 뭐냐 ❗❗


👁‍🗨 StringBuffer 클래스

String 클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만 StringBuffer 클래스는 변경이 가능하다!

내부적으로 문자열 편집을 위한 버퍼(buffer)를 가지고 있으며, StringBuffer인스턴스를 생성할 때 그 크기를 지정할 수 있다.

🔎 주요 메서드

  • .append( ) : StringBuffer 인스턴스가 저장하고 있는 문자열 뒤에 덧붙인다

  • .delete(int start, int end) : 시작위치(start) 부터 끝 위치(end) 사이에 있는 문자를 제거한다 (단, 끝 위치의 문자는 제외!)

  • .deleteCharAt(int index) : 지정된 위치(index)의 문자를 제거한다.

  • .insert(int pos, String str) : 두번째 매개변수로 받은 값을 문자열로 변환하여 지정된 위치(pos)에 추가한다. (pos는 0부터 시작)

  • .replace(int start, int end, string str) : 지정된 범위(start ~ end)의 문자들을 주어진 문자열로 바꾼다. (end 위치의 문자는 범위에 포함 되지않는다!)

  • .reverse( ) : 문자열의 순서를 거꾸로 나열한다.

  • .setCharAt(int index, char ch) : 지정된 위치의 문자를 주어진 문자(ch)로 바꾼다

  • .toString( ) : StringBuffer 인스턴스의 문자열을 String으로 반환한다.

  • .subString(int start) or .subString(int start, int end)
    : 지정된 범위 내의 문자열을 String으로 뽑아서 반환한다.


👁‍🗨 StringBuilder 클래스

StringBuffer은 멀티쓰레드에 안전하도록 동기화되어 있다.
멀티쓰레드로 작성된 프로그램이 아닌 경우, StringBuffer의 동기화는 불필요하게 성능만 떨어뜨리게 된다.

그래서 StringBuffer에서 쓰레드의 동기화만 뺀 StringBuffer를 사용한다.

두 클래스는 완전히 똑같은 기능으로 작성되어 있어서 StringBuffer 대신에 StringBuilder를 사용하도록 바꾸기만 하면 된다!


reverse( )를 사용하여 푼 문자열 뒤집기

배운 내용을 토대로 StringBuffer의 reverse( ) 메서드를 사용하여 문자열 뒤집기 문제를 다시 풀어 봤다

class Solution {
    public String solution(String my_string) {
        
        StringBuffer str = new StringBuffer(my_string);
        
        return str.reverse().toString();
    }
}

결과 성능이 좋아진것을 확인할 수 있다! 🤗


📍 참고 자료
📚 Java의 정석 3rd Edition 책

profile
개발자로 가는 👣

1개의 댓글

comment-user-thumbnail
2023년 8월 11일

좋은 정보 얻어갑니다, 감사합니다.

답글 달기

관련 채용 정보