본문 바로가기
Algorithm/프로그래머스

[프로그래머스]연습문제 : 최댓값과 최솟값 (level 2)(c++)

by HBGB 2020. 5. 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) {

    vector<int> v;

    for (int i = 0; i < s.size(); ++i)
    {
        int end = (s[i] == '-') ? i + 1 : i;
        
        // 숫자 변환
        int n = 0;
        while (end < s.size() && s[end] != ' ')
        {
            n *= 10;
            n += s[end] - '0';
            ++end;
        }
        // 음수 양수 반영
        n *= (s[i] == '-') ? -1 : 1;

        // vector push
        v.push_back(n);

        i = end;
    }

    // 최소값, 최대값 구하기
    auto minmax = minmax_element(v.begin(), v.end());

    return to_string(*minmax.first) + " " + to_string(*minmax.second);
}

 

 

저렇게 숫자를 직접 만들어주는 편이 stoi 보다 더 빠르다. 

 

minmax_element를 한번 써보았다.

이터레이터 pair 형태로 받아오는 점만 주의하면 된다.

댓글