#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <functional>
#include <vector>
using namespace std;

vector<string> v;
int i, j;
int main()
{
	//1. 입력받기
	ios::sync_with_stdio(0), cin.tie(0);
	int N; cin >> N;
	v.resize(N);

	for (int i = 0; i < N; ++i)
	{
		cin >> v[i];
	}

	//2. 각 자리수 합하고 저장
	int alp[27];
	memset(alp, 0, sizeof(int) * 27);

	for (i = 0; i < v.size(); ++i)
	{
		int pow = 1;
		for (j = v[i].size() - 1; 0<= j ; --j)
		{
			alp[v[i][j] - 'A'] += pow;
			pow *= 10;
		}
	}
	sort(alp, alp + 27, greater());

	int result = 0;
	int cnt = 9;
	for (auto data : alp)
	{
		result += data * cnt;
		--cnt;
	}
	cout << result;
	return 0;
}

||사고 과정

이번 문제는 못풀었다ㅠ

못푼 주 요인은 문제 해석을 잘못했다.

완전 핀트가 나갔었음


||사용 기법

  • Greedy

||풀면서 느낀 것

  • 테스트 케이스를 좀 분석해야봐야 할듯하다.

문제 해석하고 대충 테스트케이스에서 이러니까 이렇게 나오는구나 말고

input, output이 내가 확인한 과정과 똑같이 나오는지 세세하게 확인을 해야겠다

  • 그리디는 거의 정렬이 필수인듯하다.

여태 그리디를 풀면서 정렬을 안쓴적이 없는거 같다.

  • 가중치

어떻게 보면 가중치가 있다고 볼수있는데 가중치를 이용한건 처음인거 같아서

앞으로 가중치도 필수로 고려해봐야겠다.

+ Recent posts