문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.
s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
using namespace std;
string solution(string s) {
stringstream ss;
ss.str(s);
vector<int> v;
int num;
while(ss >> num) {
v.emplace_back(num);
}
return to_string(*min_element(v.begin(), v.end())) + " " + to_string(*max_element(v.begin(), v.end()));
}
어려운 문제는 전혀 아닌데 그냥 내가 헷갈려하는 것들이 나와서 정리할 겸 포스트한다.
vector에서의 최댓값, 최솟값
- 최댓값 :
*max_element(v.begin(), v.end());
-max_element
의 반환값은 해당 원소의 주솟값이므로 *을 붙여 값을 출력- 최솟값 :
*min_element(v.begin(), b.end());
sstream 이용해서 문자열 자르기
stringstream ss; ss.str(s); // 자를 문자열(s)를 ss에 넣어 ss를 초기화 int num; // 추출하기를 원하는 데이터의 자료형 while(ss >> num) { // int형으로 추출한 데이터를 변수 num에 담음 // 처리 }
- stringstream : 문자열에서 원하는 자료형의 데이터를 추출
- istringstream : 문자열 포맷을 parsing