[프로그래머스/181913] 문자열 여러 번 뒤집기
in Study / Coding Test
☑️ 문제
☑️ 풀이
첫 번째 풀이
- 처음에는 char 배열을 활용하여
[s, e]
구간 내에서 양쪽으로 문자를 교환하는 로직을 작성하여 문제를 해결하였다.
// 시간: 52.99ms
// 메모리: 91.9MB
import java.util.*;
class Solution {
public String solution(String my_string, int[][] queries) {
char[] arr = my_string.toCharArray();
for (int[] q : queries) {
int s = q[0];
int e = q[1];
while (s < e) {
char temp = arr[s];
arr[s] = arr[e];
arr[e] = temp;
s++;
e--;
}
}
String answer = "";
for (char c : arr) {
answer += c;
}
return answer;
}
}
두 번째 풀이
- 다른 사람의 풀이를 보고
substring()
메서드를 이용하여 다시 풀어보았다. - 구간 내에서 교환하는 게 아니라 for문을 사용하여 구간 내의 문자열을 뒤집은 후
substring()
을 사용하여 문자열을 다시 조합하는 방식이다.
//시간: 76.98ms
//메모리: 129MB
class Solution {
public String solution(String my_string, int[][] queries) {
String answer = my_string;
for (int[] q : queries) {
int s = q[0];
int e = q[1];
String reversed = "";
for (int i = e; i >= s; i--) {
reversed += answer.charAt(i);
}
answer = answer.substring(0, s) + reversed + answer.substring(e+1, my_string.length());
}
return answer;
}
}
☑️ 문법 정리 - substring()
Java의 substring()
메서드를 사용하여 문자열을 자를 수 있다.
substring(int startIndex)
- 주어진 시작 인덱스부터 문자열 끝까지의 부분 문자열을 반환
- index는 0부터 시작한다.
String str = "programmers";
System.out.println(str.substring(2)); // "ogrammers"
System.out.println(str.substring(5)); // "ammers"
substring(int startIndex, int endIndex)
- 주어진 시작 인덱스부터 끝 인덱스 직전까지의 부분 문자열을 반한다.
String str = "programmers";
System.out.println(str.substring(2, 5)); // "ogr"
System.out.println(str.substring(2, str.length())); // "ogrammers"