프로그래머스/Lv. 0(코딩테스트 입문)

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

Sigfriede 2023. 3. 24. 06:54

  문제 설명

  문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return 하도록 solution 함수를 완성해주세요.

 

  제한사항

  • 1 <= my_string의 길이 <= 1,000

 

  입출력 예

my_string return
"jaron" "noraj"
"bread" "daerb"
class Solution {
    public String solution(String my_string) {
        String answer = "";
        for (int i = my_string.length() - 1; 0 <= i; i--){
            answer += my_string.charAt(i);
        }
        return answer;
    }
}

  지난 게시글과 마찬가지로 뒤집어야 합니다. 그러나 배열과 문자열을 뒤집는 것은 비슷하면서도 다른 점이 있습니다. 이번 게시글에서는 그 부분에 대해 짚어볼까 해요.

  문자열 뒤집기 역시 for문이 마지막부터 시작해서 i값이 점차 줄어듭니다. 그러나 이외의 부분은 다릅니다. 우선 배열에서는 length라고 썼던 것과는 달리 이번에는 length()처럼 뒤에 괄호가 붙습니다. length는 array의 클래스 변수로, 배열의 길이를 나타낼 때 씁니다. 반면 length()는 java.lang.String의 메소드입니다. 이번처럼 문자열의 길이를 나타낼 때 씁니다.

  또한 배열에서는 =만 썼던 것과 달리, 이번에는 +=로 복합 대입 연산자를 사용했습니다. 이유는 배열과 문자열이 다른 데이터 유형이기 때문입니다. 일반적으로 배열은 메모리의 연속된 위치에 저장됩니다. 인덱스로 배열에 접근하고 값을 변경할 수 있으므로 = 기호를 사용하여 값을 뒤집을 수 있습니다. 그러나 문자열은 변경할 수 없는 객체로 취급되어 새로운 문자열을 생성하여 기존 문자열을 새로운 문자열에 추가해야 합니다. 따라서 += 기호를 통해 뒤집은 문자열을 차례로 추가하는 것입니다. 또 배열과 달리 문자열은 한 글자씩 접근해야 하기 때문에 charAt을 통해 해결했습니다. 

  그러나 이 풀이와 달리, StringBuilder를 통해서도 간단히 구현할 수 있습니다. 문자열은 앞서 설명했듯 변경할 수 없는 객체이기 때문에 문자열끼리 합치는 등 여러 번의 변경시도는 매번 객체를 생성해야 하므로 메모리를 많이 차지합니다. 따라서 잦은 문자열 변경이 예상된다면 StringBuilder를 통해 간단히 변경하고 메모리를 효율적으로 관리할 수 있습니다. 또한 reverse() 라는 문자열 뒤집기 메소드를 지원하므로 훨씬 더 간결하고 가독성 있는 코드를 작성할 수 있습니다.

  많이 미숙하므로 틀린 정보가 있을 수 있습니다! 틀린 부분은 댓글을 통해 알려주세요!