본문 바로가기

코딩 테스트(Coding test)/Lv. 2

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

미숙한 블로그 주인이 코딩테스트 문제를 풀어가는 과정을 담은 글입니다. 이 풀이가 효율적인 풀이가 아닐 수 있으며, 부정확한 정보가 많이 있을 수 있습니다. 보완해야할 점이 있다면 댓글로 남겨주세요!

 

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

 

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

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

programmers.co.kr

최댓값과 최솟값

문제

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

제한사항

  • s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.

 

풀이

입출력 예시

 

풀이

다음과 같은 과정을 거쳐서 최댓값과 최솟값을 구하자.

 

1. 공백을 기준으로 문자열을 잘라서 각각 저장하기

2. 각각을 정수형으로 변환하기

3. 최솟값과 최댓값을 구해서 반환

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

using namespace std;

string maxminnum(string s) {
    string answer = "";
    string tmp = s;
    vector<string> s_numbers;
    vector<int> nums;

    while (tmp.find(" ") != string::npos) {
        s_numbers.push_back(tmp.substr(0, tmp.find(" ")));
        tmp.erase(0, tmp.find(" ") + 1);
    }
    s_numbers.push_back(tmp); // 추가되지 못한 마지막 숫자 추가

    for (const auto& n : s_numbers) {
        nums.push_back(stoi(n));
    }
    answer += to_string(*min_element(nums.begin(), nums.end()));
    answer += " ";
    answer += to_string(*max_element(nums.begin(), nums.end()));

    return answer;
}

find()

는 해당 문자열을 찾아 그 위치를 반환해주고, 찾지 못하면 string::npos를 반환해준다. 위의 while문에서는 공백을 찾지 못할 때 까지 계속 반복해준다.

 

지금까지 푼 문제중 아마 가장 쉬웠던 문제가 아니었을까...