본문 바로가기

알고리즘 테스트 공부

문자열 여러번 뒤집기

1.

class Solution {
    public String solution(String my_string, int[][] queries) {
        char[] arr = my_string.toCharArray(); // 문자열을 문자 배열로 변환
        
        for (int[] query : queries) {
            int start = query[0];
            int end = query[1];
            
            while (start < end) {
                char temp = arr[start];
                arr[start] = arr[end];
                arr[end] = temp;
                
                start++;
                end--;
            }
        }
        
        return new String(arr); // 문자 배열을 문자열로 변환하여 반환
    }
}

my_string을 toCharArray() 메소드를 사용하여 문자 배열 arr로 변환
queries 배열을 for-each 루프를 통해 순회합니다. 각 반복에서는 쿼리의 시작 인덱스 start와 끝 인덱스 end를 가져옵니다.
while 루프를 사용하여 start가 end보다 작을 동안 반복합니다. 루프의 각 반복에서는 arr[start]와 arr[end]의 값을 교환합니다. 이를 위해 임시 변수 temp를 사용하여 값을 저장하고 교환합니다. 그리고 start를 증가 end를 감소
arr 배열을 new String(arr)을 사용하여 다시 문자열로 변환합니다. 그리고 이 문자열을 반환

 

 

2.

import java.util.*;

class Solution {
    public String solution(String my_string, int[][] queries) {
        for (int[] query : queries) {
            int s = query[0], e = query[1];
            StringBuffer sb = new StringBuffer();
            for (int i = s;i <= e;i++)
                sb.append(my_string.charAt(i));
            my_string = my_string.substring(0, s) + sb.reverse().toString() + my_string.substring(e + 1, my_string.length());
        }
        return my_string;
    }
}

 

 

 

3.

class Solution {

    char[] arr;

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

        arr = my_string.toCharArray();

        for (int[] query : queries) {
            reverse(query[0], query[1]);
        }

        return new String(arr);
    }

    private void reverse(int s, int e) {
        while (s < e) {
            char temp = arr[s];
            arr[s++] = arr[e];
            arr[e--] = temp;
        }
    }
}

 

 

문자열 뒤집는 방법!!

1. 반복문 사용하기

  코드  

 
public class StringReverse {
 
public static void main(String[] args) {
 
 
 
// 문자열
 
String str = "ABCDE";
 
 
 
// 문자열 reverse
 
String reverse = "";
 
for (int i = str.length() - 1; i >= 0; i--) {
 
reverse = reverse + str.charAt(i);
 
}
 
 
 
// 결과 출력
 
System.out.println(reverse); // "EDCBA"
 
 
 
}
 
}

  결과  

EDCBA

반복문을 사용하여

원본 문자열(str)을 가장 마지막 인덱스의 글자부터 읽어서

reverse 문자열에 하나씩 이어붙였습니다.

 

 

 

2. StringBuffer / reverse() 메소드 사용하기

java.lang.StringBuffer 클래스의 reverse() 메소드를 사용할 수도 있습니다.

  코드  

 
public class StringReverse {
 
public static void main(String[] args) {
 
 
 
// 문자열
 
String str = "ABCDE";
 
 
 
// 문자열 reverse
 
StringBuffer sb = new StringBuffer(str);
 
String reverse = sb.reverse().toString();
 
 
 
// 결과 출력
 
System.out.println(sb); // "EDCBA"
 
System.out.println(reverse); // "EDCBA"
 
 
 
}
 
}

  결과  

 
EDCBA
 
EDCBA

StringBuffer sb = new StringBuffer(str);

StringBuffer 클래스는 String을 다루는 클래스입니다.

생성자의 파라미터로 문자열을 입력받을 수 있습니다.

 

String reverse = sb.reverse().toString();

StringBuffer 클래스의 reverse() 메소드를 호출하면,

reverse() 메소드를 호출한 객체, 즉 여기서는 sb의 문자열을 거꾸로 뒤집어서

sb 객체의 reference를 리턴합니다.

(reverse() 메소드는 StringBuffer 객체를 리턴하기 때문에, 

toString() 메소드를 사용하여 String으로 변환해 주었습니다.)

따라서, 출력 결과를 보면,

sb 객체도 문자열이 뒤집혀 있고,

reverse() 메소드가 리턴한 reverse의 문자열도 뒤집혀 있는 것을 확인 할 수 있습니다.

출처: https://hianna.tistory.com/543 [어제 오늘 내일:티스토리]

 

'알고리즘 테스트 공부' 카테고리의 다른 글

부분 문자열 이어 붙여 문자열 만들기  (0) 2024.03.02
문자열의 뒤의 n글자  (0) 2024.02.28
9로 나눈 나머지  (0) 2024.01.11
글자 이어 붙여 문자열 만들기  (0) 2024.01.10
주사위게임 3  (1) 2024.01.09