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

[level 2] 최댓값과 최솟값

by AsCE_hyunseung 2018. 9. 8.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <string>
#include <vector>
#include <sstream>//stringstream
#include <algorithm> 
 
using namespace std;
 
string solution(string s) {
    string token = "";
    string answer = "";
    vector<int> arr;
    int min_value;
    int max_value;
 
 
    for (stringstream sts(s); (sts >> token);)//문자열을 토큰으로 잘라서 
    {                                          //int형으로 형변환 해준뒤에 벡터 arr에 넣었다.
        arr.push_back(stoi(token));
    }
 
    min_value = arr[0];
    max_value = arr[0];
 
    for (int i = 1; i < arr.size(); i++)//벡터 arr에서 최소값 최대값을 찾았다.
    {
        min_value = min(min_value, arr[i]);
        max_value = max(max_value, arr[i]);
    }
 
    answer=to_string(min_value)+' '+to_string(max_value);//int형을 string으로 형변환하고 answer에 넣었다.
 
    return answer;
}
 
cs


- 문제 설명

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

예를들어 s가 1 2 3 4라면 1 4를 리턴하고, -1 -2 -3 -4라면 -4 -1을 리턴하면 됩니다.


- 제한 조건

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


첫번째 반복문에서 문자열을 토큰으로 잘라서 int형으로 형변환 해준 뒤에 벡터 arr에 원소를 넣었고 두번째 반복문에서는 최대값, 최소값을 추출했다.

그리고 int형을 string으로 형변환 해준뒤에 문자열 answer에 넣었다.

java였으면 split()함수를 써서 토큰을 분리했겠지만 C++에서는 없기 때문에 stringstream을 이용했다.


처음 문제를 보고 숫자 사이에 공백 문자가 있는걸 이용해서 홀수 인덱스를 이용해서 원소를 추출할 수 있지 않을까라는 날로 먹기(?)를 생각했지만 음수가 있기 때문에 이 생각은 바로 접었다.


처음으로 레벨2를 푸는데 확실히 레벨 1보다 생각을 해야하는 시간이 좀 늘은 것 같다.


+ 개인적으로 어두운 테마를 좋아하고 가독성이 좋다고 생각해서 앞으론 검은색 테마를 쓸 예정이다.