본문 바로가기
  • 공부, 여행 리뷰해요~~!!
공부/C++

6. C++ string 크기 비교 2 (compare, cmp)

by 하나리나 2021. 8. 19.
반응형

* 개인 공부를 위하여 간단하게 정리한 것입니다. 

* 틀린 부분 지적은 늘 환영입니다.

 

@ 프로그래머스 정렬 문제를 풀기위한 노트입니다.

 

 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에 저런 조건을 추가하는 기능이 있는지 처음 알았습니다.ㅠㅠ

반응형