• Home
  • About
    • 최정재 photo

      최정재

      창의적인 시각으로 다양한 가능성을 탐색하는 개발의 모험가

    • Learn More
    • Email
    • Instagram
    • Github
    • Youtube
  • Posts
    • All Posts
    • All Tags
    • All Categories
  • Projects

[자바 공부] 문자열 여러번 뒤집기

12 Oct 2023

Reading time ~1 minute

[자바 공부] 문자열 여러번 뒤집기

문제

문제 설명

문자열 my_string과 이차원 정수 배열 queries가 매개변수로 주어집니다. queries의 원소는 [s, e] 형태로, my_string의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다. my_string에 queries의 명령을 순서대로 처리한 후의 문자열을 return 하는 solution 함수를 작성해 주세요.

제한 사항

  • my_string은 영소문자로만 이루어져 있습니다.
  • 1 ≤ my_string의 길이 ≤ 1,000
  • queries의 원소는 [s, e]의 형태로 0 ≤ s ≤ e < my_string의 길이를 만족합니다.
  • 1 ≤ queries의 길이 ≤ 1,000

    입출력 예시

    입출력 예
my_string queries result
“rermgorpsam” [[2, 3], [0, 7], [5, 9], [6, 10]] [[2, 3], [0, 7], [5, 9], [6, 10]]
입출력 예 설명
  • 예제 1번의 my_string은 “rermgorpsam”이고 주어진 queries를 순서대로 처리하면 다음과 같습니다.
queries my_string
  “rermgorpsam”
[2, 3] “remrgorpsam”
[0, 7] “progrmersam”
[5, 9] “prograsremm”
[6, 10] “programmers”

따라서 “programmers”를 return 합니다.

해결방안

StringBuffer의 reverse함수와 String의 substring함수를 이용함.

solution#1

import java.util.*;

class Solution {
    public String solution(String my_string, int[][] queries) {

        for(int i = 0; i < queries.length; i++){
            StringBuffer sb = new StringBuffer(my_string);
            String  start = sb.substring(0,queries[i][0]);
            String rev = sb.substring(queries[i][0],queries[i][1]+1);
            StringBuffer rev1 = new StringBuffer(rev);
            String middle = rev1.reverse().toString();
            String end = sb.substring(queries[i][1]+1);
            String cont = start + middle + end;
            my_string = cont; 
        }
        return my_string;
    }
}

한번에 출력해도 되지만 일단 보기 좋게 처음 중간 끝으로 나눠서 코드를 작성해보았다.
자바의 StringBuffer에는 다양한 기능이 있는데
그중 하나인 reverse()를 이용하여 현재 String 문자열을 반대로 뒤집어 간단하게 문제를 풀어보았다.

String 은 substring함수를 이용하여 0에서 뒤집기전인 queries[i][0]까지
그리고 바꾸고 싶은 단어는 stringbuffer의 reverse를 이용하여 뒤집어 준 후
다시 toString을 이용하여 모든 문자열과 결합하여 결과를 만들어냈다.



algorithm Share Tweet +1