산타는 없다

[프로그래머스 / programmers] 최댓값과 최솟값 풀이 - C++ 본문

코딩테스트/프로그래머스

[프로그래머스 / programmers] 최댓값과 최솟값 풀이 - C++

LEDPEAR 2020. 12. 30. 02:16
반응형

문제 원문

문제 설명

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 (최소값) (최대값)형태의 문자열을 반환하는 함수, solution을 완성하세요.
예를들어 s가 1 2 3 4라면 1 4를 리턴하고, -1 -2 -3 -4라면 -4 -1을 리턴하면 됩니다.

제한 조건

s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.

입출력 예

s return
1 2 3 4 1 4
-1 -2 -3 -4 -4 -1
-1 -1 -1 -1

코드 원문

#include <string>
#include <vector>

using namespace std;

string solution(string s) {
    string answer = "";
    return answer;
}

풀이

string을 split하는 문제입니다.

공백을 기준으로 숫자를 구분합니다.

처음엔 getline을 이용하여 split을 하였으나 직접 구현도 해보았습니다.

성공 코드

getline 사용

#include <string>
#include <vector>
#include <sstream>
#include <string>

using namespace std;

string solution(string s) {
    string answer = "";
    
    int nLast = -1;
	int nMax;
	int nMin;
	stringstream ss(s);

	string strTemp;
	getline(ss, strTemp, ' ');
	int nTemp = stoi(strTemp);
	nMax = nTemp;
	nMin = nTemp;

	while (getline(ss, strTemp, ' '))
	{
		nTemp = stoi(strTemp);
		if (nMax < nTemp)	nMax = nTemp;
		if (nMin > nTemp)	nMin = nTemp;
	}

	answer += to_string(nMin);
	answer += ' ';
	answer += to_string(nMax);
    
    return answer;
}

getline, stoi 미사용

#include <vector>
#include <iostream>
#include <string>
#include <math.h>

using namespace std;

string solution(string s) {
    string answer = "";

	int nLast = -1;
	int nMax;
	int nMin;
	int nPow = 0;

	bool Flag = false;

	string strTemp;

	for (int i = 0; i < s.size(); i++)
	{
		if (s[i] == ' ')
		{
			int nTemp = 0;

			for (int j = strTemp.size() - 1; j >= 0; j--)
			{
				if (strTemp[j] == '-')
				{
					nTemp *= -1;
				}
				else
				{
					nTemp += (pow(10, nPow++) * (strTemp[j] - '0'));
				}
			}

			//처음 값 입력
            if (!Flag)
			{
				nMax = nTemp;
				nMin = nTemp;
				Flag = true;
			}
			else
			{
				if (nMax < nTemp)	nMax = nTemp;
				if (nMin > nTemp)	nMin = nTemp;
			}
            
            //변수 초기화
			nPow = 0;
			strTemp = "";
		}
		else
		{
			strTemp += s[i];
            
            //마지막 숫자를 처리하기 위해서 공백 추가
			if (i == (s.size() - 1))
				s += ' ';
		}
	}

	answer += to_string(nMin);
	answer += ' ';
	answer += to_string(nMax);
    
    return answer;
}

결과

반응형
Comments