level 0
[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/181913
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[첫번째 풀이]
class Solution {
public String solution(String my_string, int[][] queries) {
String answer = my_string;
for(int[] query:queries) {
int s = query[0];
int e = query[1];
String reverse = "";
for(int i=e;i>s-1;i--) {
reverse += answer.charAt(i);
}
String str1 = answer.substring(0,s);
String str2 = answer.substring(e+1);
answer = str1 + reverse + str2;
}
return answer;
}
}
첫번째 풀이는 substring을 사용했다.
for문을 활용하여 answer.charAt(i) 으로 문자열을 뒤집어 주었으나, StringBuilder를 사용하여 더 간단하고 효율적으로 구현할 수 있다.
String reverse = new StringBuilder(answer.substring(s, e + 1)).reverse().toString();
위의 방법으로 사용하면 매번 새로운 String 객체를 생성하기 때문에 속도와 성능 면에서 떨어진다. char[] 를 활용하여 더 효율적으로 구현할 수 있다.
[두번째 풀이]
class Solution {
public String solution(String my_string, int[][] queries) {
String answer = my_string;
char[] charArray = answer.toCharArray();
for(int[] query:queries) {
int s = query[0];
int e = query[1];
while (s < e) {
char temp = charArray[s];
charArray[s++] = charArray[e];
charArray[e--] = temp;
}
answer = new String(charArray);
}
return answer;
}
}
StringBuilder.reverse() 는 전체 문자열을 뒤집는데에 최적화되어 있으므로 특정 구간만 뒤집고 싶을 때는 char[] 를 사용하는 것이 효율적이다.
반응형
'IT > 코딩테스트' 카테고리의 다른 글
[프로그래머스] 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기 - java (0) | 2025.03.25 |
---|---|
[프로그래머스] 수열과 구간 쿼리 4 - java (0) | 2025.03.17 |
[프로그래머스] 원하는 문자열 찾기 - java (1) | 2025.03.16 |
[프로그래머스] 특정한 문자를 대문자로 바꾸기 - java (0) | 2025.03.16 |
[프로그래머스] 수열과 구간 쿼리 3 - java (0) | 2025.03.16 |