728x90
https://www.acmicpc.net/problem/1431
1431๋ฒ: ์๋ฆฌ์ผ ๋ฒํธ
์ฒซ์งธ ์ค์ ๊ธฐํ์ ๊ฐ์ N์ด ์ฃผ์ด์ง๋ค. N์ 50๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์๋ฆฌ์ผ ๋ฒํธ๊ฐ ํ๋์ฉ ์ฃผ์ด์ง๋ค. ์๋ฆฌ์ผ ๋ฒํธ์ ๊ธธ์ด๋ ์ต๋ 50์ด๊ณ , ์ํ๋ฒณ ๋๋ฌธ์ ๋๋ ์ซ์๋ก๋ง ์ด๋ฃจ์ด
www.acmicpc.net
โญ ๋ด ์์ค ์ฝ๋
#include<iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
//์ ๋ ฌ์ ์ํ ์ฌ์ฉ์ ์ ์ ํจ์ ์ง์
bool compare(string serial1, string serial2) {
int sum1 = 0, sum2=0;
//๋ ์๋ฆฌ์ผ์ ๊ธธ์ด๊ฐ ๊ฐ์ง ์์ ๊ฒฝ์ฐ
if (serial1.length() != serial2.length()) {
//๊ธธ์ด ์์ผ๋ก ์ ๋ ฌ
return serial1.length() < serial2.length();
}
//๋ ์๋ฆฌ์ผ์ ๊ธธ์ด๊ฐ ๊ฐ์ ๊ฒฝ์ฐ
else if(serial1.length() == serial2.length()){
for (int i = 0; i < serial1.length(); i++) {
//์๋ฆฌ์ผ ๋ฌธ์๋ค ์ค ์ซ์์ ๊ฐ๋ง ๊ณ์ฐ
if (isdigit(serial1[i])) {
sum1 += serial1[i] - 48;
}
}
for (int i = 0; i < serial2.length(); i++) {
if (isdigit(serial2[i])) {
sum2 += serial2[i] - 48;
}
}
//๋ ์๋ฆฌ์ผ ๋ฒํธ์ ์ซ์ ํฉ๊ณ๊ฐ ๊ฐ์ง ์์ ๊ฒฝ์ฐ
if (sum1 != sum2) {
//ํฉ๊ณ ์์ผ๋ก ์ ๋ ฌ
return sum1 < sum2;
}
//๋ ์๋ฆฌ์ผ ๋ฒํธ์ ์ซ์ ํฉ๊ณ๊ฐ ๊ฐ์ ๊ฒฝ์ฐ
else {
//์ฌ์ ์์ผ๋ก ์ ๋ ฌ
return serial1 < serial2;
}
}
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
int case_count;
vector <string> vec;
string test_case;
cin >> case_count;
for (int i = 0; i < case_count; i++) {
cin >> test_case;
vec.push_back(test_case);
}
//์ฌ์ฉ์ ์ ์ ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ง์ ์ง์ ํ ๋ฐฉ์๋๋ก ์ ๋ ฌ
sort(vec.begin(), vec.end(), compare);
for (int i = 0; i < case_count; i++) {
cout << vec[i] << endl;
}
return 0;
}
๐ ๋ฌธ์ ํ์ด
sort(vec.begin(), vec.end(), compare);
- algorithm ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ sort() ํจ์์ 3๋ฒ์งธ ์ธ์ ๊ฐ์ผ๋ก ์ฌ์ฉ์๊ฐ ์ ์ํ ํจ์๋ฅผ ๋ฃ์ผ๋ฉด, ํด๋น ํจ์์ ๋ฐํ ๊ฐ์ ๋ฐ๋ผ ์ ๋ ฌ๋จ.
- sortํจ์๋ก vector๋ฅผ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ : sort(vec.begin(), vec.end(), (์ฌ์ฉ์ ์ ์ ํจ์)) / 3๋ฒ์งธ ์ธ์๋ฅผ ๋ฃ์ง ์์ผ๋ฉด default๋ ์ค๋ฆ์ฐจ์
728x90