문자열의 숫자 중 최소값과 최대값을 문자열로 반환하는 문제이다. 여기서 핵심은 문자열을 char로 바꾼 다음에 이를 atoi함수로 int형으로 바꾼 뒤 벡터에 넣어주는 것이다. 이 부분을 몰라 한참 헤맸다.
문자열에 공백이 있다는 점을 주의하자. 만일 공백이 아니라면 문자열 s1에 각 위치의 문자를 넣어준다. 다음 공백이 생기면 이를 정수형(문자로 바꾼 다음에 정수로 바꾼다)으로 바꿔준 뒤 벡터에 넣어준다. 이때 중복값이 생기지 않도록 문자열 s1은 clear해줘야 한다. 맨 마지막에는 공백 대신에 문자가 들어가므로 마지막 문자가 포함이 안 된다. 그러기에 벡터에 포함시키는 코드를 한 줄 더 써줘야 한다.
여기서 나는 공백이 아닐 경우에 문자를 벡터에 넣어주려고 했지만, 어쩐 일인지 음수가 포함이 안 되어 그냥 if문에 공백일 경우를 해줬다. 다른 사람의 풀이를 참고한 건 안 비밀...
다음 벡터를 sort(기본 오름차순)해준다. 최소값과 최대값을 공백 사이에 두고 문자열로 리턴하라고 했으니 answer에다가 정수형을 문자열로 바꿔주는 to_string함수를 써서 맨 앞의 값 더하기 공백 더하기 맨 뒤의 값을 만들어 준다. 그리고 만들어진 문자열을 리턴해주면 끝이다.
#include <string>
#include <vector>
#include<algorithm>
using namespace std;
string solution(string s) {
string answer = "";
string s1 = "";
vector<int> v;
for(int i=0; i<s.size(); i++){
if(s[i] == ' '){
v.push_back(atoi(s1.c_str()));
s1.clear();
}else{
s1 = s1 + s[i];
}
}
v.push_back(atoi(s1.c_str()));
sort(v.begin(), v.end());
answer = to_string(v.front()) + ' ' + to_string(v.back());
return answer;
}