IT/코딩테스트

[프로그래머스] 문자열 여러 번 뒤집기 - java

타미미 2025. 3. 18. 20:53

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[] 를 사용하는 것이 효율적이다.

반응형