반응형
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;
}
};
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.