프로그래머스 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( ) : 저장되어 있는 문자열의 순서를 거꾸로 나열하는 메서드다.
StringBuffer 클래스와 StringBuilder 클래스의 reverse( ) 메서드를 사용하면 간단하게 풀 수 있다
그럼 여기서 StringBuffer 클래스와 StringBuilder 클래스가 뭐냐 ❗❗
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으로 뽑아서 반환한다.
StringBuffer은 멀티쓰레드에 안전하도록 동기화되어 있다.
멀티쓰레드로 작성된 프로그램이 아닌 경우, StringBuffer의 동기화는 불필요하게 성능만 떨어뜨리게 된다.
그래서 StringBuffer에서 쓰레드의 동기화만 뺀 StringBuffer를 사용한다.
두 클래스는 완전히 똑같은 기능으로 작성되어 있어서 StringBuffer 대신에 StringBuilder를 사용하도록 바꾸기만 하면 된다!
배운 내용을 토대로 StringBuffer의 reverse( ) 메서드를 사용하여 문자열 뒤집기 문제를 다시 풀어 봤다
class Solution {
public String solution(String my_string) {
StringBuffer str = new StringBuffer(my_string);
return str.reverse().toString();
}
}
결과 성능이 좋아진것을 확인할 수 있다! 🤗
📍 참고 자료
📚 Java의 정석 3rd Edition 책
좋은 정보 얻어갑니다, 감사합니다.