본문 바로가기

프로그래머스(Java)/Level 0

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

728x90

코드 힌트

  1. 쿼리 순회
    • 주어진 queries 배열을 순회하며 각 쿼리에서 시작 인덱스 s와 끝 인덱스 e를 추출합니다.
  2. 앞부분 자르기
    • my_string에서 시작 인덱스 s 이전의 문자열을 저장합니다.
  3. 뒤집을 부분 문자열 생성
    • String을 사용하여 my_string에서 s부터 e까지의 문자열을 뒤집습니다.
    • 문자열 뒤집는 2가지 방법 : https://shs00925.tistory.com/60
  4. 뒷부분 자르기
    • my_string에서 끝 인덱스 e 이후의 문자열을 저장합니다.
  5. 새로운 문자열 생성
    • s이전의 문자열, 뒤집은 문자열, e이후의 문자열을 합쳐서 새로운 my_string을 만듭니다.
  6. 최종 결과 반환
    • 모든 쿼리를 처리한 후 최종 결과 문자열을 반환합니다.

 


정답은 더보기 클릭

더보기

1. String으로 문제 풀기

class Solution {
    public String solution(String my_string, int[][] queries) {
        // 주어진 쿼리들에 대해 순회합니다.
        for (int[] query : queries) {
            int s = query[0]; // 시작 인덱스
            int e = query[1]; // 끝 인덱스

            // 문자열의 앞부분을 자릅니다.
            String front = my_string.substring(0, s);

            // 뒤집을 부분 문자열을 생성합니다.
            StringBuilder reverseStr = new StringBuilder();
            for (int i = e; i >= s; i--) {
                reverseStr.append(my_string.charAt(i));
            }

            // 문자열의 뒷부분을 자릅니다.
            String back = my_string.substring(e + 1);

            // 새로운 문자열을 생성합니다.
            my_string = front + reverseStr.toString() + back;
        }

        // 최종 결과 문자열을 반환합니다.
        return my_string;
    }
}

2. StringBuilder를 활용하여 문제 풀기

import java.util.*;

class Solution {
    public String solution(String my_string, int[][] queries) {
        
        
        for (int[] query : queries) {
            StringBuilder sb = new StringBuilder(my_string.substring(query[0],query[1]+1));
            my_string = my_string.substring(0,query[0]) 
                          + sb.reverse() 
                          + my_string.substring(query[1]+1);
            
        }
        return my_string;
    }
}

 

728x90