프로그래머스

[코딩테스트 연습] 문자열 여러 번 뒤집기 - Lv.0

yujin0517 2023. 5. 16. 22:13

문자열 여러 번 뒤집기 

 

<코드 1>

class Solution {
    public String solution(String my_string, int[][] queries) {
        String answer = "";
        
        int len = my_string.length();
        String[] my_str = my_string.split("");
        String[] str = new String[len];
        
        for(int i = 0; i < queries.length; i++) {
            int s = queries[i][0];
            int e = queries[i][1];
            
            for(int j = 0; j <= e-s; j++) {
                str[e-j] = my_str[s+j];
            }
            for(int j = 0; j <= e-s; j++) {
                my_str[s+j] = str[s+j];
            }
            
        }
        
        for(int i = 0; i < len; i++) {
            answer += my_str[i];
        }
        
        return answer;
    }
}

 

↓ 속도 개선 

 

<코드 2>

class Solution {
    public StringBuilder solution(String my_string, int[][] queries) {
        StringBuilder str = new StringBuilder(my_string);
        
        for(int i = 0; i < queries.length; i++) {
            int start = queries[i][0];
            int end = queries[i][1];
            
            StringBuilder s = new StringBuilder(str.substring(start, end+1));
            s.reverse();
            str.replace(start, end+1, s.toString());
        }
        
        return str;
    }
}

 

<문제 풀이>

첫 번째 코드는 Java에서 제공하는 메서드를 사용하지 않고, 반복문을 사용해서 문자를 뒤집는 코드다. 

이렇게 코드를 짜면 아무래도 원했던 결과가 나오지 않을 확률이 높다. 입력받은 구역의 문자들을 잘 뒤집었다고 해도 뒤집은 문자들이 제자리에 들어가지 못할 수도 있기 때문이다. 

그리고 이중 for문이 사용되기 때문에 속도 측면에도 좋지 않다. 

두 번째 코드는 메서드를 사용하여 코드를 작성하였다. 

substring() 메서드를 통해서 입력받은 구역만큼 문자열을 가져왔다. 

그리고 reverse() 메서드를 사용해서 문자열을 뒤집었고,

replace() 메서드를 사용해서 원래 있던 문자열에서 뒤집은 문자열로 교체했다. 

이렇게 코드를 작성하니 속도 측면에서도 좋은 결과가 나왔다.