문제 풀이/Programmers 문제 풀이

[Programmers, C++]#Level2_최댓값과 최소값, stringstream, istringstream, sstream

Hardii2 2024. 9. 12. 17:46


#1. 문제

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 


 

#2. 풀이

 

1. istringstream, ostringstream

#include <sstream>
istringstream(입력 문자열 스트림): 문자열로부터 데이터를 읽어오는 입력 스트림 클래스입니다. 문자열을 입력 스트림으로 취급하여 다양한 데이터 타입으로 파싱 할 수 있습니다. 

ostringstream(출력 문자열 스트림): 데이터를 문자열로 출력하는 출력 스트림 클래스입니다. 다양한 데이터 타입을 문자열로 변환하여 하나의 문자열로 조합할 수 있습니다.

 

2. istringstream, ostringstream 활용

  1. 주어진 문자열 s를 istringstream 객체에 넣어줍니다.
  2. while 문을 돌며 문자열 s를 파싱한 결과를 임시 문자열에 넣어줍니다.
  3. 임시 문자열을 int로 변환하고, 최댓값과 최솟값 업데이트 작업을 진행합니다.
  4. 마지막으로, 최소값과 최댓값을 문자열로 변환하기 위해 ostringstream(출력 문자열 스트림)를 활용하고, oss.str()을 반환해 줍니다.

 


 

#3. 코드

/*
    @링크: https://school.programmers.co.kr/learn/courses/30/lessons/12939
    @문제: Level2, 최댓값과 최솟값
    @설명
        1. stringstream 헤더, istringstream
*/

#include <string>
#include <sstream>
#include <algorithm>
#include <limits>

using namespace std;

string solution(string s) {
    istringstream iss(s);
    string token;
    int minVal = numeric_limits<int>::max();
    int maxVal = numeric_limits<int>::min();

    while (iss >> token) {
        //@공백이 아닌 '-' 혹은 숫자
        int num = stoi(token);

        //@최소 값
        minVal = min(minVal, num);

        //@최대 값
        maxVal = max(maxVal, num);
    }

    //@최솟값, 최대값
    ostringstream oss;
    oss << minVal << ' ' << maxVal;
    return oss.str();
}