본문 바로가기

Algorithm/String

(C++) - LeetCode (easy) 1592. Rearrange Spaces Between Words

반응형

https://leetcode.com/problems/rearrange-spaces-between-words/description/

문자열을 다루는 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

1. 전체 공백 개수 totalSpace를 선언 후 text의 공백 개수를 세줍니다.

2. text를 공백으로 구분해 split해서 정확히 단어들의 vector를 반환하는 split함수를 구현해 그 결과를 splited에 저장합니다.

3. 단어개수 wordCount 선언 후 값을 저장해줍니다.

4. 단어개수가 1개라면 필요한 공백은 0이며 단어개수가 2개인 것 부터 단어 사이에 공백을 균등배분 해줘야 합니다. 균등배분할 공백 개수 spaceBetweenWords선언 후 값을 저장합니다.

5. 균등 배분 후 남은 공백 개수 extraSpace를 선언 후 값을 저장합니다. 단어개수가 1개라면 totalSpace 값을 가지며 초과하면 균등 배분해 남는 공백 개수값을 가집니다

6. 정답 변수 ans를 선언해 줍니다.

📔 풀이과정

1. splited에 원소를 순회하며 ans에 단어 + 단어 사이에 spaceBetweenWords만큼의 공백을 붙여줍니다.2. 균등 배분 후 마지막에 extraSpace만큼의 공백을 붙여줍니다.

📔 정답 출력 | 반환

ans를 반환합니다.


📕 Code

📔 C++

class Solution {
public:
    vector <string> split (string input, char delimeter){
        stringstream ss(input);
        string tmp;
        vector <string> res;
        while(getline(ss, tmp, delimeter)) {
            if (!tmp.empty())  // 빈 문자열은 결과에 포함시키지 않음
                res.push_back(tmp);
        }
        return res;
    }

    string reorderSpaces(string text) {
        int totalSpace = count(text.begin(), text.end(), ' ');
        vector <string> splited = split(text, ' ');
        int wordCount = splited.size();

        int spaceBetweenWords = wordCount > 1 ? totalSpace / (wordCount - 1) : 0;
        int extraSpace = wordCount > 1 ? totalSpace % (wordCount - 1) : totalSpace;

        string ans;
        for(int i = 0; i < splited.size(); i++) {
            ans += splited[i];
            if(i != splited.size() - 1) {
                ans.append(spaceBetweenWords, ' ');
            }
        }
        ans.append(extraSpace, ' ');
        return ans;
    }
};

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.