알고리즘 문제/C++

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

lingk 2020. 7. 10. 20:18
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(string s) {
    string answer = "";
    vector<int> rng;
    int tmp=0;
    int check=0;
    for(int i=0;i<s.size();i++){
        if(s[i]==' '){
            if(check==1)
                rng.push_back(tmp*(-1));
            else
                rng.push_back(tmp);
            tmp=0;
            check=0;
        }
        else if(s[i]=='-')
            check=1;
        else{
            tmp=tmp*10+(s[i]-'0');
        }
        if(i==(s.size()-1)){if(check==1)
                rng.push_back(tmp*(-1));
            else
                rng.push_back(tmp);
            tmp=0;
            check=0;}
    }
    sort(rng.begin(),rng.end());
    answer+=to_string(rng[0]);
    answer+=" ";
    answer+=to_string(rng[rng.size()-1]);
    return answer;
}

이 문제는 문자열을 공백을 기준으로 나누어 숫자들을 비교해 주어야한다. 문자열을 숫자로 비교해주기 위해서 문자가 숫자일 경우, '-'부호일 경우, 공백일 경우로 나누어 생각하였다.

공백일 경우

저장한 tmp를 벡터에 추가해주고 부호를 나타내는 check와 숫자를 저장하는 tmp는 모두 0으로 초기화

'-'부호인 경우

부호를 나타내는 check변수에 1대입

숫자인 경우

tmp에 저장되어있던 숫자에 10을 곱하고 더해줌

 

++공백을 기준으로 숫자를 벡터에 추가해 주었지만, 마지막 요소일 경우에는 바로 벡터에 추가해주어야함

++음수일 경우, 한자리 숫자가 아닌 경우를 생각해 주어야함

 

rng벡터에 저장된 숫자들을 sort함수로 정렬 시킨 후 int형인 첫번째 요소와 마지막 요소를 to_string함수로 변환하여 answer에 더해주었다.

반응형