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

☑️ 문제

프로그래머스 181913

☑️ 풀이

첫 번째 풀이

  • 처음에는 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"

© 2021. All rights reserved.

yaejinkong의 블로그