[문제 설명]
문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.제한 조건
- s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.
입출력 예
s | return |
"1 2 3 4" | "1 4" |
"-1 -2 -3 -4" | "-4 -1" |
"-1 -1" | "-1 -1" |
[문제 풀이]
이 문제는 입력으로 들어오는 문자열 s에서 공백으로 각 정수들을 찾아내서 그 정수들 중 최댓값과 최솟값을 문자열로 반환하면 된다.
공백으로 각 정수를 찾아내는 부분은
stringstream을 사용하면 굉장히 편하게 할 수 있다.
사용하기 위해 헤더는 #include <sstream>을 추가해주면 된다.
stringstream ss; 이런식으로 선언한 후에
ss.str(string) 을 넣어주면 된다.
이후에 ss >> temp 와 같이 cin을 사용하는것과 동일하게 사용하면 공백을 기준으로 알아서 나눠져서 나오게 된다.
여기서 받는 자료형도 선언하는 변수에 맞게 형변환 되는 것 같다.
우리는 여기서 string -> int로 변환해야 하므로 변수를 int로 선언해서 ss > int형 변수로 받으면 된다.
각 숫자들을 하나씩 확인하면서 min, max값을 확인하고
확인된 min, max 값을 string으로 변환하기 위해 to_string() 함수를 사용하면 된다.
마지막에 answer.append(to_string(min) + " " + to_string(max));
위와 같이 answer 형식을 맞춰서 return해주면 된다.
[코드]
[GitHub]
코드가 깨끗하고 명확하게 보일진 모르겠지만, 누군가에게 도움이 될 수도.. 있기에..
#include <bits/stdc++.h>
#include <sstream>
using namespace std;
string solution(string s)
{
int min = INT_MAX;
int max = -INT_MAX;
stringstream ss;
string answer = "";
ss.str(s);
int num = 0;
while(ss >> num)
{
if(min > num)
min = num;
if(max < num)
max = num;
}
answer.append(to_string(min) + " " + to_string(max));
return answer;
}
'Problem Solving > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - 괄호 회전하기(C/C++) (0) | 2022.12.01 |
---|---|
[프로그래머스] - JadenCase 문자열 만들기(C/C++) (0) | 2022.11.15 |
[프로그래머스] - 햄버거 만들기(C/C++) (0) | 2022.11.07 |
[프로그래머스] - 네트워크(C/C++) (0) | 2022.10.07 |
[프로그래머스] - 배달(C/C++) (0) | 2022.10.02 |