[๋ฐฑ์ค]์๋ฆฌ์ผ ๋ฒํธ 1431๋ฒ ๋ฌธ์ ํ์ด
https://www.acmicpc.net/problem/1431
๋ฌธ์
๋ค์์ด๋ ๊ธฐํ๋ฅผ ๋ง์ด ๊ฐ์ง๊ณ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ ๊ธฐํ๋ ๋ชจ๋ ๋ค๋ฅธ ์๋ฆฌ์ผ ๋ฒํธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋ค์์ด๋ ๊ธฐํ๋ฅผ ๋นจ๋ฆฌ ์ฐพ์์ ๋นจ๋ฆฌ ์ฌ๋๋ค์๊ฒ ์ฐ์ฃผํด์ฃผ๊ธฐ ์ํด์ ๊ธฐํ๋ฅผ ์๋ฆฌ์ผ ๋ฒํธ ์์๋๋ก ์ ๋ ฌํ๊ณ ์ ํ๋ค.
๋ชจ๋ ์๋ฆฌ์ผ ๋ฒํธ๋ ์ํ๋ฒณ ๋๋ฌธ์ (A-Z)์ ์ซ์ (0-9)๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์๋ฆฌ์ผ๋ฒํธ A๊ฐ ์๋ฆฌ์ผ๋ฒํธ B์ ์์ ์ค๋ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
-
A์ B์ ๊ธธ์ด๊ฐ ๋ค๋ฅด๋ฉด, ์งง์ ๊ฒ์ด ๋จผ์ ์จ๋ค.
-
๋ง์ฝ ์๋ก ๊ธธ์ด๊ฐ ๊ฐ๋ค๋ฉด, A์ ๋ชจ๋ ์๋ฆฌ์์ ํฉ๊ณผ B์ ๋ชจ๋ ์๋ฆฌ์์ ํฉ์ ๋น๊ตํด์ ์์ ํฉ์ ๊ฐ์ง๋ ๊ฒ์ด ๋จผ์ ์จ๋ค. (์ซ์์ธ ๊ฒ๋ง ๋ํ๋ค)
-
๋ง์ฝ 1,2๋ฒ ๋ ์กฐ๊ฑด์ผ๋ก๋ ๋น๊ตํ ์ ์์ผ๋ฉด, ์ฌ์ ์์ผ๋ก ๋น๊ตํ๋ค. ์ซ์๊ฐ ์ํ๋ฒณ๋ณด๋ค ์ฌ์ ์์ผ๋ก ์๋ค.
์๋ฆฌ์ผ์ด ์ฃผ์ด์ก์ ๋, ์ ๋ ฌํด์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๊ธฐํ์ ๊ฐ์ N์ด ์ฃผ์ด์ง๋ค. N์ 1,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์๋ฆฌ์ผ ๋ฒํธ๊ฐ ํ๋์ฉ ์ฃผ์ด์ง๋ค. ์๋ฆฌ์ผ ๋ฒํธ์ ๊ธธ์ด๋ ์ต๋ 50์ด๊ณ , ์ํ๋ฒณ ๋๋ฌธ์ ๋๋ ์ซ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค. ์๋ฆฌ์ผ ๋ฒํธ๋ ์ค๋ณต๋์ง ์๋๋ค.
https://modernalchemist.tistory.com/32
์ด ๋ฌธ์ ์ ์์ค์ฝ๋๋ฅผ ์์ ํ์ฌ ๋ฌธ์ ๋ฅผ ํ์์ต๋๋ค. ๋งํฌ๋ฅผ ๋ค์ด๊ฐ์ ํ์ธ ๋ถํ๋๋ฆฝ๋๋ค.
#include <iostream>
#include <algorithm>
using namespace std;
int number;
string a[20000];
int getSum(string a) {
int sum = 0;
for (int i = 0; i < a.length(); i++) {
//์ซ์์ธ ๊ฒฝ์ฐ๋ง ๋ํจ
if (a[i] - '0' <= 9 && a[i] - '0' >= 0) {
sum += a[i] - '0';
}
}
return sum;
}
bool compare(string a, string b) {
if (a.length() != b.length()) {
return a.length() < b.length();
}
else {
int aSum = getSum(a);
int bSum = getSum(b);
//๊ธ์์ ํฌํจ๋ ์ซ์์ ํฉ์ผ๋ก ์ ๋ ฌ
if (aSum != bSum) {
return aSum < bSum;
}
else {
return a < b;
}
}
}
int main(void) {
cin >> number;
for (int i = 0; i < number; i++) {
cin >> a[i];
}
sort(a, a + number, compare);
for (int i = 0; i < number; i++) {
if (i > 0 && a[i] == a[i + 1]) continue;
cout << a[i] << '\n';
}
}