문제 설명

문자열 s에는 공백으로 구분된 숫자들이 있고, s에 다타나는 숫자 중 최소값과 최대값을 찾아 "(최소값) (최대값)" 형태의 문자열을 return

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이법

문자열을 공백을 기준으로 split하고, stoi를 통해 int형 벡터로 받아준다

이후 벡터를 오름차순으로 정렬하고, 최솟값과 최대값을 하나의 문자열로 생성한다

 

문자열을 공백을 기준으로 split할때 사용하는 것이 string stream이다

#include <sstream> 헤더를 적으면 사용할 수 있다

string stream은 메모리 버퍼에 문자열을 저장해두고, 필요할 때 사용할 수 있다

주로 문자열에서 원하는 자료형의 데이터를 추출할 때 사용한다

 

 

소스 코드

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

using namespace std;

vector<string> split(string input, char delimiter) {
    vector<string> result;
    stringstream ss(input);
    string tmp;
 
    while (getline(ss, tmp, delimiter)) {
        result.push_back(tmp);
    }
 
    return result;
}

string solution(string s) {
    string answer = "";
    
    vector<string> str = split(s, ' ');
    vector<int> num;
    
    for (string tmp : str) {
        int i = stoi(tmp);
        num.push_back(i);
    }
    
    sort(num.begin(), num.end());
    
    answer = to_string(num[0]) + ' ' + to_string(num[num.size() - 1]);
    
    return answer;
}
복사했습니다!