최댓값과 최솟값

NJW·2022년 1월 3일
0

코테

목록 보기
7/170

들어가는 말

문자열의 숫자 중 최소값과 최대값을 문자열로 반환하는 문제이다. 여기서 핵심은 문자열을 char로 바꾼 다음에 이를 atoi함수로 int형으로 바꾼 뒤 벡터에 넣어주는 것이다. 이 부분을 몰라 한참 헤맸다.

코드 설명

문자열에 공백이 있다는 점을 주의하자. 만일 공백이 아니라면 문자열 s1에 각 위치의 문자를 넣어준다. 다음 공백이 생기면 이를 정수형(문자로 바꾼 다음에 정수로 바꾼다)으로 바꿔준 뒤 벡터에 넣어준다. 이때 중복값이 생기지 않도록 문자열 s1은 clear해줘야 한다. 맨 마지막에는 공백 대신에 문자가 들어가므로 마지막 문자가 포함이 안 된다. 그러기에 벡터에 포함시키는 코드를 한 줄 더 써줘야 한다.
여기서 나는 공백이 아닐 경우에 문자를 벡터에 넣어주려고 했지만, 어쩐 일인지 음수가 포함이 안 되어 그냥 if문에 공백일 경우를 해줬다. 다른 사람의 풀이를 참고한 건 안 비밀...
다음 벡터를 sort(기본 오름차순)해준다. 최소값과 최대값을 공백 사이에 두고 문자열로 리턴하라고 했으니 answer에다가 정수형을 문자열로 바꿔주는 to_string함수를 써서 맨 앞의 값 더하기 공백 더하기 맨 뒤의 값을 만들어 준다. 그리고 만들어진 문자열을 리턴해주면 끝이다.

코드

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

using namespace std;

string solution(string s) {
    string answer = "";
    string s1 = "";
    vector<int> v;
    
    for(int i=0; i<s.size(); i++){
        if(s[i] == ' '){
            v.push_back(atoi(s1.c_str()));
            s1.clear();
        }else{
            s1 = s1 + s[i];
        }
    }
    
    v.push_back(atoi(s1.c_str()));
    sort(v.begin(), v.end());
    answer = to_string(v.front()) + ' ' + to_string(v.back());
    
    return answer;
}
profile
https://jiwonna52.tistory.com/

0개의 댓글