본문 바로가기
Algorithm/알고리즘 문제풀이

LeetCode 557(Reverse Words in a String III, java)

by devraphy 2022. 4. 25.

0. 문제

https://leetcode.com/problems/reverse-words-in-a-string-iii/

 

Reverse Words in a String III - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

 

1. 문제 설명

- 문제에서 문자열(s)이 주어진다.

- 해당 문자열은 공백을 포함한 여러 개의 단어로 이루어져 있다.

- 단어 단위로 역순으로 정렬하는 것이 문제의 핵심이다.

 

 

2. 문제 해설

- 어떤 문제를 푸는 방식은 다양하지만, 이 문제는 StringBuilder()를 사용하는 방법에 대한 이해를 필요로 한다.

- 문제의 해설을 보기 전에 StringBuilder()의 메서드에 대해 알아두기를 권장한다.

 

a) 첫 번째 접근

- 우선 어떻게 단어를 구분할 것인가에 대해서 생각해봐야 한다.

- 즉, 구분자를 찾아야 한다.

 

- 문제에서는 공백을 유지한 채로 단어를 역순으로 정렬하라고 한다.

- 그러므로 공백을 단어의 구분자로 사용할 수 있다.

 

- 공백을 구분자로 split() 메서드를 사용하여 String 배열(= array)에 단어별로 저장한다.

 

 

b) 두 번째 접근

- 정답을 저장 및 반환할 String 객체가 필요한데, 우선 StringBuilder() 객체(= result)를 사용한다.

- StringBuilder() 객체를 이용하는 이유는, 다음 연산과정에서 append()를 수행하기 때문이다.

 

- 문자열을 병합할 때 String 객체를 사용하면 그 과정에서 java 내부적으로 새로운 String 객체를 생성하여 저장한다. 

- 이러한 방식의 병합은 추가적인 메모리를 사용하므로, 이를 방지하기 위하여 StringBuilder()를 이용한다.

 

 

c) 세 번째 접근

- 앞서 공백을 구분자로 하여 단어별로 저장한 배열(= array)이 있다.

- 개선된 for 반복문을 사용하여 해당 array의 단어를 탐색한다.

- 각 단어를 StringBuilder() 객체로 생성한 후, StringBuilder의 메서드인 reverse()를 사용하여 역순으로 만든다.

- 그 후 result에 저장한다. 참고로 각 단어는 공백이 제거된 상태이므로, 공백을 함께 저장해야 한다.

 

 

d) 네 번째 접근

- 여기까지 단어별 역순으로의 정렬은 끝났다. 이제 반환만 하면 된다.

- 문제는 String이 반환형으로 설정되어 있다.

- 그러나 result 또한 StringBuilder() 객체다.

- 그러므로 toString() 메서드를 사용하여 result를 String으로 변환한다.

- 더불어, String으로 변환된 result의 앞 또는 뒤에 있을 수 있는 공백을 제거하기 위해서 trim() 메서드를 함께 사용한다.

 

- 다음 코드를 보면서 이해해보자. 

 

 

3. 정답 코드

class Solution {
    public String reverseWords(String s) {
        
        String[] array = s.split(" ");
        StringBuilder result = new StringBuilder();
        
        for(String word : array) {
            StringBuilder sb = new StringBuilder(word);
            result.append(sb.reverse() + " ");
        }
        return result.toString().trim();
    }
}

댓글