백준 알고리즘 풀이 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;
}
틀린 내용이나 지적 언제나 환영입니다.
도움이 되었다면 하트 한번씩 눌러주세요:)