문제
풀이과정
양수, 0, 음수 모두를 고려해서 최솟값과 최댓값을 찾아야 하는 문제이다.
고려해야 할 사항은 다음과 같다.
1. string으로 주어지는 문자열을 C++에서 어떻게 split할 것인가?
2. 최댓값/최소값을 어떻게 구별할 것인가?
3. 문자열과 숫자 간 변환을 어떻게 할 것인가?
C++에서 공백을 기준으로 문자를 나누는 방법은 크게 substr()을 사용하는 방법과 stream을 사용하는 방법이 있다.
필자는 stream을 사용하였다.
vector에서 최대/최솟값을 알아내는 방법은 max()와 min()함수를 사용하는 방법, sort()로 정렬해서 찾아내는 방법, max_element()와 min_element()를 사용하는 방법 등 매우 다양하다.
sort()로 정렬할 때에는 정렬된 vector의 양 끝 값을 가져오면 된다.
필자는 sort() 방법과 max_element(), min_element() 방법 모두 사용하여 효율성을 비교해보았다.
문자열과 숫자 간 변환 방법은 다음과 같다.
문자열->숫자: <cstdlib> 헤더의 atoi(), <string> 헤더의 stoi()
숫자->문자열: <string> 헤더의 to_string()
풀이 코드
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
#include <iostream>
using namespace std;
string solution(string s) {
string answer = "";
vector<int> numbers;
stringstream ss(s);
string word;
while (getline(ss, word, ' '))
numbers.push_back(stoi(word));
// max_element()와 min_element()를 사용하는 방법
int max = *max_element(numbers.begin(), numbers.end());
int min = *min_element(numbers.begin(), numbers.end());
answer = to_string(min) + " " + to_string(max);
// sort()함수를 사용하는 방법
//sort(numbers.begin(), numbers.end());
//answer = to_string(numbers[0]) + " " + to_string(numbers[numbers.size() - 1]);
return answer;
}
실행 결과
테스트를 돌려본 결과, max_element()와 min_element()를 사용하는 방법이 sort()를 사용하는 방법보다 시간적인 측면에서 좀 더 우위에 있었다.
'coding test' 카테고리의 다른 글
[프로그래머스/level2] JadenCase 문자열 만들기 (0) | 2024.01.22 |
---|---|
[프로그래머스/level2] 영어 끝말잇기 (0) | 2024.01.17 |
[programmers/level3] 야근 지수 (0) | 2024.01.12 |