프로그래머스/Lv. 0(코딩 기초 트레이닝)

[프로그래머스 코딩테스트] 문자열 뒤집기(Java)

Sigfriede 2023. 5. 6. 01:20

  문제 설명

  문자열 my_string과 정수 s, e가 매개변수로 주어질 때, my_string에서 인덱스 s부터 인덱스 e까지를 뒤집은 문자열을 return 하는 solution 함수를 작성해 주세요.

 

  제한사항

  • my_string은 숫자와 알파벳으로만 이루어져 있습니다.
  • 1 <= my_string의 길이 <= 1,000
  • 0 <= s <= e < my_string의 길이

 

  입출력 예

my_string s e result
"Progra21Sremm3" 6 12 "ProgrammerS123"
"Stanley1yelnatS" 4 10 "Stanley1yelnatS"
import java.lang.StringBuilder;
class Solution {
    public String solution(String my_string, int s, int e) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s; i++) {
            sb.append(my_string.charAt(i));
        }
        for (int i = e; i >= s; i--) {
            sb.append(my_string.charAt(i));
        }
        for (int i = e + 1; i < my_string.length(); i++) {
            sb.append(my_string.charAt(i));
        }
        String answer = sb.toString();
        return answer;
    }
}

  StringBuilder를 생성합니다. 이 방법은 for문을 연속으로 사용합니다.

  for문이 0부터 s까지 순회합니다. my_string의 i번째 문자까지 append 메소드로 sb에 추가합니다. 다음 for문이 e부터 s까지 1씩 감소하며 my_string의 i번째 문자가 역순으로, append 메소드로 sb에 추가합니다. 마지막 for문은 선택적으로 동작합니다. e가 문자열의 길이와 동일할 수도, 아닐 수도 있기 때문입니다. 만약 문자열의 길이가 e보다 크다면 이 for문이 동작합니다. i는 e + 1부터 my_string의 길이, 즉 끝까지 순회합니다. i번째 문자를 append 메소드로 sb에 추가합니다.

  answer에 sb를 할당합니다. StringBuilder는 출력하기 전 toString 메소드를 이용하여 올바른 문자열을 출력할 수 있도록 합니다.

import java.lang.StringBuilder;
class Solution {
    public String solution(String my_string, int s, int e) {
        StringBuilder sb = new StringBuilder();
        sb.append(my_string.substring(s, e + 1)).reverse();
        sb.append(my_string.substring(e + 1));
        String answer = my_string.substring(0, s) + sb.toString();
        return answer;
    }
}

  이 방법은 주로 메소드를 이용합니다. 앞선 코드보다 코드가 간결해집니다.

  마찬가지로 StringBuilder를 생성합니다. String 클래스의 substring 메소드로 s부터 e까지 절단합니다. 이를 StringBuilder의 메소드인 reverse로 뒤집습니다. append 메소드로 sb에 추가합니다. 앞선 코드에서 그랬듯 문자열의 길이가 e보다 클 때, 두 번째 append가 선택적으로 동작합니다. 다시 substring 메소드로 e + 1부터 문자열의 끝까지 절단합니다. 뒤집지 않은 문자열 앞 부분을 substring으로 절단하여 sb와 문자열끼리 붙여줍니다.

왼쪽 for문, 오른쪽 substring 속도차이 비교