알고리즘 문제/백준

[C++] 단어 수학 - 1339

우대비 2022. 12. 5. 17:32
반응형

lambda, std algorithm, vector

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

using namespace std;

struct ALPHA
{
public:
	ALPHA(char c, int p)
	{
		apb = c;
		point = p;
	}

	char apb;
	int point;
	int level = 0;

	bool operator < (ALPHA& al)
	{
		return this->point > al.point;
	}
};

int main()
{
	int N;
	string str;
	vector<ALPHA> v;
	int num = 9;

	cin >> N;

	for (int i = 0; i < N; i++)
	{
		cin >> str;

		for (int j = 0; j < str.size(); j++)
		{
			auto it = find_if(v.begin(), v.end(), [str, j](auto it) {return it.apb == str[j];});
			if (it == v.end())
			{
				v.push_back(ALPHA(str[j], 0));
				it = --v.end();
			}
			it->point += static_cast<int>(pow(10, str.size()  - j - 1));
		}
	}
	sort(v.begin(), v.end());
	

	int result = 0;
	for (int i = 0; i < v.size(); i++)
	{
		v[i].level = num--;
		result += v[i].level * v[i].point;
	}

	cout << result;

	
	return 0;
}

 

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

using namespace std;


int main()
{
	vector<pair<int, char>> pv;
	string str;
	int N;

	cin >> N;

	for (int i = 0; i < N; i++)
	{
		cin >> str;

		for (int j = 0; j < str.size(); j++)
		{
			auto it = find_if(pv.begin(), pv.end(), [str, j](auto it) {return it.second == str[j];});

			if (it == pv.end())
			{
				pv.push_back(pair<int, char>(0, str[j]));
				it = --pv.end();
			}
			it->first += static_cast<int>(pow(10, str.size() - j - 1));
		}
	}
	sort(pv.begin(), pv.end());


	int result = 0;
	int num = 10 - static_cast<int>(pv.size());

	for (int i = 0; i < pv.size(); i++)
		result += num++ * pv[i].first;

	cout << result;




	return 0;
}
반응형
LIST

'알고리즘 문제 > 백준' 카테고리의 다른 글

[C++] 파티(Dijkstra) - 1238  (1) 2022.12.22
[C++] 가운데를 말해요 - 1655  (2) 2022.12.10
[C++] 축사 배정 - 2188  (0) 2022.12.01
[C++] 별자리 만들기 - 4386  (0) 2022.11.29
[C++] 2*n 타일링 2 - 11727  (1) 2022.11.26