알고리즘/프로그래머스

[프로그래머스 C++] 최댓값과 최솟값

문제 : 최댓값과 최솟값

문제 설명

 문자열 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;
}