최댓값과 최솟값
troubleshooting·4 min read·2026-08-07
한 줄 요약
문자열을 split→stoi로 숫자 배열로 만든 뒤, min/max로 찾아서 to_string으로 다시 합친다.
왜 (배경/문제 상황)
최댓값과 최솟값 — 공백으로 구분된 숫자 문자열("1 2 3 4")에서 최댓값과 최솟값을 찾아 "최솟값 최댓값" 형태로 반환하는 문제.
원인 분석 → 해결 방법
시도 1: 함수 호출 방식 오류
answer.split(s, ' '); // split을 answer(vector)의 멤버함수처럼 호출
split은 vector의 멤버함수가 아니라 직접 정의한 자유 함수라서, 객체.함수() 형태가 아니라 split(s, ' ')처럼 그냥 이름으로 호출해야 한다.
시도 2: 타입 불일치
vector<int> answer;
answer = split(s, ' '); // split은 vector<string>을 리턴하는데 vector<int>에 대입
split이 리턴하는 건 아직 텍스트 상태인 vector<string>이라, 숫자로 쓰려면 stoi로 변환하는 단계가 빠졌었다.
시도 3: 리턴 타입 불일치
string solution(string s) {
...
return answer; // answer가 vector<int>인데 solution은 string을 리턴해야 함
}
최종 코드
string solution(string s) {
vector<string> tmp = split(s, ' ');
int min_n = 1e9;
int max_n = -1e9;
for (int i = 0; i < tmp.size(); i++) {
min_n = min(min_n, stoi(tmp[i]));
max_n = max(max_n, stoi(tmp[i]));
}
return to_string(min_n) + " " + to_string(max_n);
}
예제
4단계로 정리하면: (1) split으로 토큰화 → (2) stoi로 숫자 변환 → (3) min/max 갱신 → (4) to_string으로 합치기. min_element/max_element로도 동일하게 풀 수 있는데, 그 경우 iterator를 반환하므로 *min_element(...)처럼 역참조가 필요하다.
주의사항
min_n/max_n초기값을 문제 제약조건보다 여유 있게 잡아야 한다 (1e9,-1e9).to_string(min_n) + ' ' + to_string(max_n)처럼char(' ')를 문자열 사이에 껴도string::operator+(char)가 지원돼서 동작은 하지만, 의도를 더 명확히 하려면" "(문자열 리터럴)을 쓰는 게 관례적이다.