1339번 - 단어 수학
기본적인 로직은 만약 ABC라고 할 경우 , c라는 벡터 배열에 C 1개, B 10개, A 100개 라고 넣어준다.
그리고 이 c 벡터 배열을 sort 하고 가장 많은 값부터 9를 집어넣어서 수를 만들면 최대값이 완성된다.
##
substr 사용법을 잊어버려서 다시 공부했다.
substr(a)는 a번 자리부터 마지막까지 문자열을 반환하기 때문에,
이 문제에서는 문자열을 처음에 reverse 시켜주고 문제를 푸는데 사용했다.
<정답 코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; vector<int> c(26); void calc(string s) { int multi = 1; int size = s.size(); reverse(s.begin(), s.end()); while (true) { char tmp = s[0]; c[s[0] - 'A'] += multi; multi*= 10; s = s.substr(1); if (s.size() == 0) { return; } } } int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { string s; cin >> s; //scanf("%s", &s); calc(s); } sort(c.begin(), c.end()); int ans = 0; int k = 9; for (int i = c.size() - 1; i >= 0; i--) { ans += k*c[i]; k--; } printf("%d\n", ans); return 0; } | cs |
반응형