공부/C++
6. C++ string 크기 비교 2 (compare, cmp)
하나리나
2021. 8. 19. 20:43
반응형
* 개인 공부를 위하여 간단하게 정리한 것입니다.
* 틀린 부분 지적은 늘 환영입니다.
@ 프로그래머스 정렬 문제를 풀기위한 노트입니다.
int형 배열 {5,9,11,5,42,3}을 나열한 숫자 중 가장 큰 수는 95542311 이 될 것입니다. 어떻게 구할까요? 한참을 고민하고 풀어봐도 못 풀어서 구글 선생님의 힘을 빌렸습니다...ㅠㅠ
1. string형 배열 생성
vector<int> strs = { 5,9,11,5,42,3 };
string ans = solution(strs);
2. solution 함수는 다음과 같습니다.
2.2. to_string을 이용하여 strs 배열의 원소들을 int형으로 변환합니다.
2.2. sort 함수에 cmp라는 조건을 추가합니다. -> (3.으로)
2.3. vector를 다시 재배열한뒤(reverse) string을 쭉 이어줍니다.
string solution(vector<int> strs) {
string ans;
vector<string> temp;
for (int i = 0; i < strs.size(); i++)
temp.push_back(to_string(strs[i]));
sort(temp.begin(), temp.end(), cmp);
reverse(temp.begin(), temp.end());
for (int i = 0; i < strs.size(); i++)
ans += temp[i];
//if (ans.empty())
// return "0";
return ans;
}
3. sort 함수
3.1. str1 + str2 가 str2 + str1보다 크면 true -> 오름차순 정렬
3.2. str1 + str2 가 str2 + str1보다 작으면 false -> 오름차순 정렬하지 않음
3.3. 이러한 조건을 sort 함수에 추가
bool cmp(string& str1, string& str2) {
return str1 + str2 < str2 + str1 ? true : false;
}
4. 전체 코드
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
bool cmp(string& str1, string& str2) {
return str1 + str2 < str2 + str1 ? true : false;
}
string solution(vector<int> strs) {
string ans;
vector<string> temp;
for (int i = 0; i < strs.size(); i++)
temp.push_back(to_string(strs[i]));
sort(temp.begin(), temp.end(), cmp);
reverse(temp.begin(), temp.end());
for (int i = 0; i < strs.size(); i++)
ans += temp[i];
if (ans.empty())
return "0";
return ans;
}
int main() {
vector<int> strs = { };
string ans = solution(strs);
cout << ans << endl;
return 0;
}
그런데,,, 프로그래머스에 위 코드를 실행입력하지 11번 테스트에서 오류가 뜨는군요,, 좀 더 고민해봐야겠습니다.
+ sort에 저런 조건을 추가하는 기능이 있는지 처음 알았습니다.ㅠㅠ
반응형