
기본적인 for문을 사용해 풀이하였는데 성능적으로 아쉬운 부분이 있어 여러가지 다른 풀이 방법을 함께 정리해보았습니다.
메모리: 75.5 MB, 시간: 9.32 ms
반복문을 사용해 주어진 문자열의 length()-1 부터 0까지 반복합니다.
초기화한 answer에 chatAt(index)로 문자를 추가해줍니다.
class Solution {
public String solution(String my_string) {
String answer = "";
for(int i = my_string.length()-1; i >= 0; i--){
answer += my_string.charAt(i);
}
return answer;
}
}
메모리: 75.8 MB, 시간: 0.03 ms // StringBuilder
메모리: 73.7 MB, 시간: 0.07 ms // StringBuffer
인스턴스를 생성할 때 reverse() 메소드로 문자열을 변경하여 strReversed 변수에 담아줍니다. 변수를 toString하여 리턴하는 패턴으로 StringBuilder와 StringBuffer 두 클래스를 동일한 로직을 사용합니다.
이전 코드보다 성능이 상대적으로 좋아진 것을 확인 할 수 있습니다.
StringBuilder와 StringBuffer는 가변적인 문자열을 다루는 클래스입니다. 두 클래스는 거의 동일한 기능을 제공하지만, 차이점은 스레드 안전성에 있습니다. StringBuilder는 스레드 안전하지 않고, StringBuffer는 스레드 안전합니다. 그러므로 단일 스레드 환경에서는 StringBuilder를 사용하는 것이 일반적으로 더 효율적입니다.
주요 메소드
append(): 문자열을 추가합니다.
insert(): 지정된 위치에 문자열을 삽입합니다.
delete(): 지정된 범위의 문자열을 삭제합니다.
deleteCharAt(): 지정된 인덱스의 문자를 삭제합니다.
replace(): 지정된 범위의 문자열을 다른 문
자열로 대체합니다.
reverse(): 문자열을 뒤집습니다.
toString(): String으로 변환합니다.
class Solution {
public String solution(String my_string) {
StringBuilder strReversed = new StringBuilder(my_string).reverse();
// StringBuffer strReversed = new StringBuffer(my_string).reverse();
String answer = strReversed.toString();
return answer;
}
}