HyeLog

๋ฐฑ์ค€_1339_๋‹จ์–ด์ˆ˜ํ•™ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฐฑ์ค€_1339_๋‹จ์–ด์ˆ˜ํ•™

shj718 2022. 5. 10. 07:39

๐Ÿ“๋ฌธ์ œ: https://www.acmicpc.net/problem/1339

 

1339๋ฒˆ: ๋‹จ์–ด ์ˆ˜ํ•™

์ฒซ์งธ ์ค„์— ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 10)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๋‹จ์–ด๊ฐ€ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ๋‹จ์–ด๋Š” ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค. ๋ชจ๋“  ๋‹จ์–ด์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ์•ŒํŒŒ๋ฒณ์€ ์ตœ๋Œ€

www.acmicpc.net

 

๐Ÿ“์•Œ๊ณ ๋ฆฌ์ฆ˜: ๋ธŒ๋ฃจํŠธํฌ์Šค - ์ˆœ์—ด (Greedy ๋˜๋Š” ๋ธŒ๋ฃจํŠธํฌ์Šค-์žฌ๊ท€๋กœ๋„ ํ’€ ์ˆ˜ ์žˆ์Œ)

 

๐Ÿ“์•„์ด๋””์–ด: ASCII ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด์„œ charํ˜• ๋ฐฐ์—ด์„ ๋‹ค๋ฅธ ๋ฐฐ์—ด์˜ index๋กœ ์‚ฌ์šฉํ•ด์„œ ์•ŒํŒŒ๋ฒณ์„ ์ˆซ์ž๋กœ ์น˜ํ™˜.

 

๐Ÿ”ญ ๋ฒกํ„ฐ ์ค‘๋ณต ์ œ๊ฑฐ ๋ฐฉ๋ฒ•:

๋ฐ˜๋“œ์‹œ sort ํ•œ ํ›„์— unique ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์ œ๊ฑฐ.

// alphabets ๋ฒกํ„ฐ ์ค‘๋ณต ์ œ๊ฑฐ
sort(alphabets.begin(), alphabets.end());
alphabets.erase(unique(alphabets.begin(), alphabets.end()), alphabets.end());

 

๐Ÿ“์ฝ”๋“œ:

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

using namespace std;

int N; // ๋‹จ์–ด ๊ฐœ์ˆ˜
char alpha[128]; // ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ์•ŒํŒŒ๋ฒณ์ด ์–ด๋–ค ์ˆซ์ž๋กœ ๋ฐ”๋€Œ๋Š”์ง€ ์ €์žฅ (์ธ๋ฑ์Šค๋Š” ASCII ์ฝ”๋“œ)

int calc(vector<string>& wordArr, vector<char>& alphabets, vector<int>& numbers) {
	int s = alphabets.size();
	int sum = 0;
	for (int i = 0; i < s; i++) {
		alpha[alphabets[i]] = numbers[i]; // ์•ŒํŒŒ๋ฒณ์„ ์ˆซ์ž๋กœ ์น˜ํ™˜
	}

	for (string word : wordArr) {
		int now = 0;
		for (char x : word) {
			now = now * 10 + alpha[x];
		}
		sum += now;
	}
	return sum;
}

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> N;
	vector<string> wordArr(N);
	vector<char> alphabets; // ๋‹จ์–ด์— ์–ด๋–ค ์•ŒํŒŒ๋ฒณ๋“ค์ด ์žˆ๋Š”์ง€
	for (int i = 0; i < N; i++) {
		cin >> wordArr[i];
		for (char letter : wordArr[i]) {
			alphabets.push_back(letter);
		}
	}

	// alphabets ๋ฒกํ„ฐ ์ค‘๋ณต ์ œ๊ฑฐ
	sort(alphabets.begin(), alphabets.end());
	alphabets.erase(unique(alphabets.begin(), alphabets.end()), alphabets.end());
	int s = alphabets.size();
	vector<int> numbers;
	for (int i = 9; i > 9 - s; i--) { // ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋‹ˆ๊นŒ 9๋ถ€ํ„ฐ ์•ŒํŒŒ๋ฒณ ๊ฐœ์ˆ˜๋งŒํผ ์ˆซ์ž ๊ณ ๋ฅด๊ธฐ
		numbers.push_back(i);
	}

	// ์ˆœ์—ด ์ตœ๋Œ€๊ฐ’ ๊ตฌํ•˜๊ธฐ
	int ans = 0;
	do {
		int tmp = calc(wordArr, alphabets, numbers);
		if (ans < tmp) {
			ans = tmp;
		}
	} while (prev_permutation(numbers.begin(), numbers.end()));

	cout << ans << '\n';
	return 0;
}