관리 메뉴

한다 공부

[C++] 백준 알고리즘 1431번 시리얼 번호 본문

Algorithm/문제풀이

[C++] 백준 알고리즘 1431번 시리얼 번호

사과당근 2021. 9. 9. 04:42

이 문제는

sort STL을 이용해서 풀었다

 

알고리즘을 include하고

sort(시작, 끝, 정렬방식(선택));

하면 된다.

 

정렬방식의 경우 기본 값은 오름차순이라 한다.

 

백준 알고리즘 1431번 시리얼 번호

 

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

//각 자리 숫자 합 함수
//아스키 코드 이용해서 문자열 중 숫자만 추출
int sum(string s) {
	int i, sum = 0;
	for (i = 0; i < s.length(); i++) {
		if (s[i] >= 48 && s[i] <= 57) {
			sum = sum + s[i] - 48;
		}
	}
	return sum;
}

//비교 함수
bool cmp(const string & a, const string & b) {
	//조건 1
	if (a.length() != b.length())
		return a.length() < b.length();

	//조건2
	else if (sum(a) != sum(b))
		return sum(a) < sum(b);

	//조건3
	else
		return a < b;
}


int main() {
	vector<string> guitar;
	string num;
	int n, temp;
	cin >> n;
	temp = n;
	while (temp != 0) {
		cin >> num;
		guitar.push_back(num);
		temp--;
	}

	sort(guitar.begin(),guitar.end(),cmp);
	int i;
	for (i = 0; i < n; i++) {
		cout << guitar[i] << endl;
	}
}

정렬 방식으로 cmp (compare)함수를 구현해봤는데

 

a.length()<b.length() 는

a의 길이가 b의 길이보다 짧으면 true,

즉 정렬이 이루어져

길이가 짧은 순으로 정렬된다

 

정도로 이해하면 될 것 같다