공부혜옹

백준 1339 단어수학 본문

공부합시다/Algorithm

백준 1339 단어수학

Blair06 2021. 8. 31. 17:29

보자마자 가장 큰 자릿수에 있는 알파벳부터 차례대로 숫자를 부여해 계산하면 되겠다라고 간단히 생각해서 코딩하다가 그렇다면 다른자릿수에 있는 같은 알파벳 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