단어 수학

108번뇌·2021년 5월 23일
0

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
	int N=0;
	int Result(0);
	int arr[100] = { 0, };//알파벳 담는 배열입니다.
	cin >> N;
	for (int i = 0; i < N; i++)
	{
		string sTemp;
		cin >> sTemp;
		int iTemp=1;
		for (int i = sTemp.size() - 1; i >= 0; i--)
		{
			arr[sTemp[i] - 'A'] += iTemp;
			iTemp *= 10;
		}
	}

	sort(arr, arr+100, [](int a, int b) {
		return a > b;
	});//내림차순 정렬

	for (int i = 0; i < 10; i++)
	{
		Result += arr[i] * (9 - i);
	}

	cout << Result;
}

이문제의 idea가
최대합을 구하는 내용에서,

for (int i = 0; i < N; i++)
	{
		string sTemp;
		cin >> sTemp;
		int iTemp=1;
		for (int i = sTemp.size() - 1; i >= 0; i--)
		{
			arr[sTemp[i] - 'A'] += iTemp;
			iTemp *= 10;
		}
	}

이부분은 단어가 들어오고, 뒤에서부터 1씩 채워서 가장 큰 숫자에는 가장 높은 숫자를 배분하는 형식이다.
for (int i = 0; i < N; i++)반복문 만큼 돌아가는데, arr[]배열에서 추가적으로 더해지게 된다.
이렇게 구해진 다음
sort()내림차순을 통해
for (int i = 0; i < 10; i++)
{
Result += arr[i] * (9 - i);
}
논리를 통해서 가장 큰 최대값을 구하게 된다.

  1. 여러 숫자들 사이에서 최댓값 만들기 이 문제 자체의 메커니즘 알기.
  2. arr[sTemp[i] - 'A'] += iTemp; 이건 알파벳 배열을 처리하는 방식이다.
    B일경우는 arr[1]에 해당된다.
profile
내일 아침 눈을 떳을 때, '기대되는 오늘 하루를 만들기 위해' 나는 오늘도 생각하고 고민한다.

0개의 댓글

관련 채용 정보