이 문제를 해결하는 방법 중 하나는 각 알파벳에 대해 몇 번 등장하는지 세고, 가장 많이 등장하는 알파벳에 7을, 그 다음으로 많이 등장하는 알파벳에 6을, 그 다음에 5를, 이런 식으로 값을 할당하는 것입니다.
이 방법을 이용하면 합계를 최대화할 수 있습니다.
아래 C 코드를 참고하시기 바랍니다.
#include<stdio.h>#include<string.h>int char_to_num[256];
int freq[256];
char str1[11], str2[11];
intmain(){
// 두 문자열을 입력받는다.scanf("%s %s", str1, str2);
// 두 문자열에서 각 알파벳의 등장 횟수를 센다.for (int i = 0; i < strlen(str1); i++) freq[str1[i]]++;
for (int i = 0; i < strlen(str2); i++) freq[str2[i]]++;
// 등장 횟수에 따라 가장 큰 값부터 알파벳에 할당한다.for (int i = 7; i >= 1; i--) {
int max_freq = -1;
char max_char;
for (char c = 'A'; c <= 'J'; c++) {
if (char_to_num[c] == 0 && freq[c] > max_freq) {
max_freq = freq[c];
max_char = c;
}
}
char_to_num[max_char] = i;
}
// 각 문자열의 알파벳을 할당받은 값으로 변환한 후 더한다.int sum1 = 0, sum2 = 0;
for (int i = 0; i < strlen(str1); i++) sum1 = sum1 * 10 + char_to_num[str1[i]];
for (int i = 0; i < strlen(str2); i++) sum2 = sum2 * 10 + char_to_num[str2[i]];
// 두 합을 더해 출력한다.printf("%d\n", sum1 + sum2);
return0;
}
이 문제를 해결하는 방법 중 하나는 각 알파벳에 대해 몇 번 등장하는지 세고, 가장 많이 등장하는 알파벳에 7을, 그 다음으로 많이 등장하는 알파벳에 6을, 그 다음에 5를, 이런 식으로 값을 할당하는 것입니다.
이 방법을 이용하면 합계를 최대화할 수 있습니다.
아래 C 코드를 참고하시기 바랍니다.
#include <stdio.h> #include <string.h> int char_to_num[256]; int freq[256]; char str1[11], str2[11]; int main() { // 두 문자열을 입력받는다. scanf("%s %s", str1, str2); // 두 문자열에서 각 알파벳의 등장 횟수를 센다. for (int i = 0; i < strlen(str1); i++) freq[str1[i]]++; for (int i = 0; i < strlen(str2); i++) freq[str2[i]]++; // 등장 횟수에 따라 가장 큰 값부터 알파벳에 할당한다. for (int i = 7; i >= 1; i--) { int max_freq = -1; char max_char; for (char c = 'A'; c <= 'J'; c++) { if (char_to_num[c] == 0 && freq[c] > max_freq) { max_freq = freq[c]; max_char = c; } } char_to_num[max_char] = i; } // 각 문자열의 알파벳을 할당받은 값으로 변환한 후 더한다. int sum1 = 0, sum2 = 0; for (int i = 0; i < strlen(str1); i++) sum1 = sum1 * 10 + char_to_num[str1[i]]; for (int i = 0; i < strlen(str2); i++) sum2 = sum2 * 10 + char_to_num[str2[i]]; // 두 합을 더해 출력한다. printf("%d\n", sum1 + sum2); return 0; }