Notice
Recent Posts
Recent Comments
Link
반응형
공부혜옹
백준 1339 단어수학 본문
보자마자 가장 큰 자릿수에 있는 알파벳부터 차례대로 숫자를 부여해 계산하면 되겠다라고 간단히 생각해서 코딩하다가 그렇다면 다른자릿수에 있는 같은 알파벳 ex) abcd + gaf 에서 a의 경우는 어떻게 처리해야할지 막막해졌다..
따로 저장해서 일일히 표기를 해둘까하다가 내가 생각한 접근방법이 처음 부터 틀렸다는 생각이 들었고 다시 로직을 짜기 시작했다.
우선 가장 큰자릿수에 가장큰 수 9를 적용해야 수의 합이 최대가 된다는것은 명확한 사실이다. 문제는 가장 큰자릿수의 알파벳이 무엇인지 판별하는것.
처음에 보이는 자릿수에 따라서 무턱대고 숫자를 부여했다면 이번엔 글자 자체에 자릿수를 한번 부여해보는식으로 접근했다. 위 이미지에서 c의 경우 1000자리와 10자리 두군데에 분포해있기 때문에 c라는 알파벳 자체의 총 자릿수는 1010이다.
이런식으로 각 알파벳마다 자신의 총자릿수를 구해 가장 총자릿수가 높은 알파벳부터 숫자 9~0을 할당하는것이다.
#include <iostream>
#include <algorithm>
#include <string.h>
#include<cmath>
using namespace std;
int n;
int arr[30]={0,};
bool desc(int a, int b){
return a > b;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for(int i=0; i<n; i++){
string str;
cin >> str;
int count = 0;
for(int j = str.length()-1; j>=0; j--){
arr[str[j]-'A'] += pow(10,count);
count++;
}
}
sort(arr,arr+30,desc);
int answer =0;
int count = 9;
for(int i=0; i<30; i++){
if(arr[i] != 0){
answer += arr[i]*count;
count--;
}
}
cout << answer;
return 0;
}
반응형
'공부합시다 > Algorithm' 카테고리의 다른 글
백준 1004 어린 왕자 (0) | 2021.09.14 |
---|---|
백준 15686 치킨배달 (0) | 2021.08.31 |
백준 1915 가장 큰 정사각형 (0) | 2021.08.17 |
백준 2133 타일 채우기 (0) | 2021.08.16 |
백준 11057 오르막 수 (0) | 2021.08.15 |
Comments