백준 알고리즘 풀이 1339번 - 단어 수학

2020. 5. 20. 17:25카테고리 없음

https://www.acmicpc.net/problem/1339

 

1339번: 단어 수학

첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대

www.acmicpc.net


- 수학 구현 문제.

 

알고리즘

예시를 들어서 생각해보자. 

GCF. ACDEB 두 문자열이 있다고 가정. 동류항끼리 묶어보자.

GCF+ACDEB = 10^4 * A + (10^3 + 10^1) * C + 10^2 * D + 10^0 * B + 10^1 * E + 10^0 * F + 10^2 * G

각 항에 대해 오름차순 정렬한뒤 , 가장 큰 항에 대해 순차적으로 9,8,7,6 ... 을 부여한다.

그 뒤 다 더해주면 된다.


첫 아이디어를 생각하는 것이 어려웠고, 인덱스를 정하는 점이 어려웠다. 그 외에는 구현 문제이므로 어렵지 않았다.

소스코드

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

using namespace std;
int arr[30]={0,};
bool desc(int a,int b){
	return a>b;
}

int main()
{
	int num;
	cin>>num;
	int count=0;
	for(int i=1;i<=num;i++){
		string st;
		cin>>st;
		for(int j=1;j<=st.length();j++){
			if(arr[int(st.at(j-1))-64]==0) count++; 
			arr[int(st.at(j-1))-64] += int(pow(10,(st.length()-j)));
		}
	}
	int ans=0;
	
	sort(arr,arr+27,desc);
	for(int i=0;i<=count;i++){
		ans+=arr[i]*(10-i-1);
	}
	cout<<ans;
}

 

 

 

틀린 내용이나 지적 언제나 환영입니다.

도움이 되었다면 하트 한번씩 눌러주세요:)