class Solution {
public String solution(String my_string, int[][] queries) {
String answer = "";
StringBuilder sb = new StringBuilder(my_string);
for (int i = 0; i < queries.length; i++) {
int start = queries[i][0];
int startcount = start;
int end = queries[i][1];
int endcount = end;
for (int j = 0; j < (endcount - startcount) / 2 + 1; j++) {
char temp = sb.charAt(start);
sb.setCharAt(start, sb.charAt(end));
sb.setCharAt(end, temp);
answer = sb.toString();
start++;
end--;
}
}
return answer;
}
}
이렇게 풀었다가
성능 개선 처리
1. StringBuilder의 toString() 메서드는 내부적으로 새로운 String 객체를 생성한다 따라서 반복문 내에서 이 메소드를 사용하면 성능이 저하 될 수 있다. 이를 피하기 위해 answer = sb.toString(); 을 for문 바깥, 마지막에 한 번만 호출한다
2. 쿼리의 수만큼 문자열 전체를 순회하고있다. 따라서 쿼리가 많거나 문자열이 긴 경우, 이 방식은 비효율적 일 수 있다. 쿼리를 효율적으로 처리하기위해, 쿼리 범위의 서브스트링을 뒤집은 후 원래 문자열에 다시 붙이는 방식을 사용할 수 있다.
public static String solution(String my_string, int[][] queries) {
StringBuilder sb = new StringBuilder(my_string);
for (int i = 0; i < queries.length; i++) {
int start = queries[i][0];
int end = queries[i][1];
StringBuilder sub = new StringBuilder(sb.substring(start, end + 1));
sb.replace(start, end + 1, sub.reverse().toString());
}
return sb.toString();
}