프로그래머스 - 최댓값과 최솟값 < Level 2 >

2020. 7. 9. 09:39알고리즘_생각하기/프로그래머스 Level 2

문제 설명

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

제한 조건

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

풀이

사용 언어 : C++

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

string solution(string s) 
{
    string answer = "";
    
    
     int idx = 0;        //어디부터 어디까지 변환하여 벡터에 담을것인지
    string temp = "";   //임시 스트링
    vector<int>t;   //임시로 정수형으로 저장 할 벡터
    string min = "";   //미니멈
    string max = "";   //맥시멈

for (int i = 0; i < s.size(); i++)   //스트링 전체 돌려 돌려
    {
        if (s[i] == ' ')  //공백이면?
        {
            for (int j = idx; j < i; j++)  //idx부터 공백 이전까지 돌려 돌려 
            {
                temp += s[j];  //임시 스트링에 담기

                if (j == i - 1)   // 공백 빼고 이전까지 다 담았으면?
                {
                    t.push_back(stoi(temp, 0));   //벡터에 형변환하여 담기
                    temp = "";   //임시 스트링 초기화! 초기화 하지 않으면 쌓인다.
                    idx = i + 1;   //idx를 공백 다음 자리로 바꿔주기

                }
            }
        }

        if (i == s.size() - 1) //끝 자리까지 돌았으면 공백이 없다!
        {
            for (int j = idx; j <= i; j++)   //돌려 돌려~ 주의! j를 i까지 돌려줘야 한다! 공백이 아니니까!!
            {
                temp += s[j];   //담고~

                if (j == i)   //주의! 위에서는 i가 공백이었기 때문에 i - 1이었지만 이 부분은 공백이 없기 때문에 i로!
                {
                    t.push_back(stoi(temp, 0));   //담고~
                    temp = "";  //초기화! 하지만 굳이 하지 않아도 된다!
                    break;
                }
            }
        }
    }


    sort(t.begin(), t.end()); //정렬~


    min = to_string(t[0]);  //미니멈은 맨 앞에
    max = to_string(t[t.size() - 1]);   //맥시멈은 맨 뒤에 있음

    answer = min + " " + max;  //중간에 공백 넣는거 잊지 말기!

    
    return answer;
}