문제 : 최댓값과 최솟값
문제 설명
문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최솟값과 최댓값을 찾아 이를 (최소값) (최댓값) 형태의 문자열을 반환하는 함수, solution을 완성하세요.
예를 들어 s가 1 2 3 4라면 1 4를 리턴하고, -1 -2 -3 -4라면 -4 -1을 리턴하면 됩니다.
제한 조건
- s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.
분석
형변환만 유의하면 되는 문제이다. stoi()함수가 "-1"도 정상적으로 -1로 인식하므로 특별히 어려운 부분은 없다.
만약 형변환 없이 하게 되면, 정렬할 때 compare 부분을 새로 정의해야 한다. 새로운 정의 없이하면 음수만 있을 때 문제가 발생한다. 사전순이기에 절댓값으로 정렬한 꼴이 된다.
구현
using namespace std;
string solution(string s)
{
string answer = "";
vector<int> data;
// 슬라이싱
int idx = 0, start_idx = 0, size = s.size();
while (true)
{
if (s[idx] == ' ')
{
string tmp = s.substr(start_idx, idx - start_idx);
data.push_back(stoi(tmp));
start_idx = idx + 1;
}
if (++idx == size)
{
string tmp = s.substr(start_idx);
data.push_back(stoi(tmp));
break;
}
}
// 오름차순 정렬
sort(data.begin(), data.end());
answer += to_string(data.front()) + ' ' + to_string(data.back());
return answer;
}
int main()
{
cout << solution("1 -2 3 4"); // -2 4
return 0;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 C++] 피보나치 수 (0) | 2021.02.12 |
---|---|
[프로그래머스 C++] 최솟값 만들기 (0) | 2021.02.11 |
[프로그래머스 C++] 이진 변환 반복하기 (0) | 2021.02.09 |
[프로그래머스 C++] 숫자의 표현 (0) | 2021.02.08 |
[프로그래머스 C++] - 폰켓몬 (0) | 2021.02.07 |