[BOJ-Code] 1339 - 단어 수학

Posted by DHniyeo Blog on March 10, 2024

문제 링크

💡 그리디 알고리즘

Memory 1416KB Time 0ms Code Length 687B

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
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <string>

using namespace std;
bool cmp(const int &a, const int &b) {
	return a > b;
}
int main() {
	int n;
	long long memory[100] = {0};
	string arr[10];
	long long result = 0;
	scanf("%d", &n);
	getchar();
	for (int i = 0; i < n; i++) {
		char tmp[11];
		scanf("%s", tmp);
		getchar();
		arr[i] = tmp;
	}

	for (int i = 0; i < n; i++) {
		int string_size = arr[i].size()-1;
		for (int j = 0; j < arr[i].size(); j++) {
			memory[arr[i][j]] +=pow(10, string_size);
			string_size--;
		}
	}
	sort(memory, memory + 100, cmp);

	for (int i = 0; i < 9; i++) {
		result += memory[i] * (9 - i);
	}

	printf("%lld", result);

}

이 코드는 문자열을 입력받아 각 문자의 등장 빈도를 계산하고, 이를 기반으로 가장 높은 빈도부터 큰 수를 부여하여 결과를 계산하는 프로그램이다. 문자열을 입력받은 후, 각 문자의 등장 빈도를 저장하는 memory 배열을 생성하고, 각 문자의 빈도를 계산하여 해당하는 인덱스에 더해준다. 그런 다음, memory 배열을 내림차순으로 정렬하고 상위 9개의 요소를 이용하여 결과를 계산한다. 마지막으로 결과를 출력한다.