본문 바로가기
대딩/프로그래머스풀이

[프로그래머스 lv2] 최댓값과 최솟값 풀이

by 경아ㅏ 2022. 8. 14.

 프로그래머스의 모든 문제와 해설 보기[클릭]

 

해설

 

공백으로 구분된 숫자들 중 최솟값과 최댓값을 구하는 문제이다.

 

우리는 숫자 값을 비교하고 싶은데, 숫자들이 문자열 안에 파묻혀 있으므로 이를 숫자로 파싱하는 작업을 먼저 해주어야 한다.

문자열을 공백 기준으로 쪼개는 함수를 흔히 split() 함수라 하는데, c++에는 내장 split이 없으므로(python에는 있음) 직접 구현해보자.

문자열을 순회하면서 공백이 나올 때마다 단어들을 추출하여 vector에 넣어준다.

 

문자열 안에 있는 숫자들을 하나씩 split 한 후에는 각각의 숫자들을 순회하면서 최댓값과 최솟값을 구하면 정답이다.

 

 

코드

#include <cstring>
#include <cmath>
#include <algorithm>
#include <tuple>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <cctype>
#include <iostream>

using namespace std;
using ii = pair<int, int>;
using iii = tuple<int, int, int>;

#define X first
#define Y second

vector<string> split(string s) {

    vector<string> v;

    int st = 0;
    s += ' ';
    for (int i=0; i<s.size(); i++) {
        if (s[i] != ' ') continue;
        v.push_back(s.substr(st, i-st));
        st = i+1;
    }
    return v;
}

string solution(string s) {

    vector<string> v = split(s);

    int mn = stoi(v[0]);
    int mx = stoi(v[0]);
    for (int i=1; i<v.size(); i++) {
        int n = stoi(v[i]);
        mn = min(mn, n);
        mx = max(mx, n);
    }

    return to_string(mn)+" "+to_string(mx);
}

 

 

댓글