Algorithm/Programmers(c++)

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

kim-hasa 2021. 8. 16. 13:20

https://programmers.co.kr/learn/courses/30/lessons/12939

 

코딩테스트 연습 - 최댓값과 최솟값

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

programmers.co.kr

문자열을 분석해서 최대값과 최소값을 알아내는 문제입니다.

 

먼저 문자열을 한문자씩 돌리면서 공백이 나올때까지 만듭니다. 공백이 나오면 문자를 숫자로 바꿔서 배열에 넣습니다.

 

마지막으로 배열을 정렬하고, 처음과 마지막 인덱스를 문자열로 만들어서 리턴합니다.

 

 

공백을 제거한 문자열을 만드는 방법을 어디선가 봤던 것 같은데,,, 더 공부해봐야겠습니다.

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

string solution(string s) {
    string answer = "";
    int len = s.length();   // 길이
    string str = "";        // 저장할 배열
    vector<int> count;
    
    for(int i=0; i<len ; i++)
    {
        if(s[i] == ' ') // 공백인경우
        {
            if(str[0] == '-')   // 음수인경우
            {
                string minus = str.substr(1);   // 부호 제거 후 변경
                int min = stoi(minus);          
                min = 0 - min;                  // 음수로 변경
                count.push_back(min);           // 벡터에 추가
                str = "";                       // 초기화
            }
            else
            {
                int plus = stoi(str);           // 양수로 변경
                count.push_back(plus);          // 벡터에 추가
                str = "";                       // 초기화
            }
        }
        else
        {
            str += s[i];    // 아닌경우 문자열 증가
        }
    }
    
    if(str[0] == '-')   // 음수인경우
    {
        string minus = str.substr(1);
        int min = stoi(minus);
        min = 0 - min;
        count.push_back(min);
    }
    else
    {
        int plus = stoi(str);
        count.push_back(plus);
    }                           // 마지막 배열도 추가
    
    int size = count.size();    // 넣은 숫자 배열의 크기
    
    sort(count.begin(), count.end());       // 정렬
    
    string big = to_string(count[size-1]);  // 가장 큰 수
    string small = to_string(count[0]);     // 가장 작은 수

    answer += small + ' ' + big;    // 문자열 만들기
    
    return answer;
}